@@ -443,6 +443,68 @@ for (t, uploc, isunitc) in ((:LowerTriangular, 'U', 'N'),
443
443
end
444
444
end
445
445
446
+ function LinearAlgebra. mul! (X:: DenseCuMatrix{T} ,
447
+ A:: LowerTriangular{T,<:DenseCuMatrix} ,
448
+ B:: UpperTriangular{T,<:DenseCuMatrix} ,
449
+ ) where {T<: CublasFloat }
450
+ triu! (parent (B))
451
+ trmm! (' L' , ' L' , ' N' , ' N' , one (T), parent (A), parent (B), parent (X))
452
+ X
453
+ end
454
+
455
+ function LinearAlgebra. mul! (X:: DenseCuMatrix{T} ,
456
+ A:: UpperTriangular{T,<:DenseCuMatrix} ,
457
+ B:: LowerTriangular{T,<:DenseCuMatrix} ,
458
+ ) where {T<: CublasFloat }
459
+ tril! (parent (B))
460
+ trmm! (' L' , ' U' , ' N' , ' N' , one (T), parent (A), parent (B), parent (X))
461
+ X
462
+ end
463
+
464
+ for (trtype, valtype) in ((:Transpose , :CublasFloat ),
465
+ (:Adjoint , :CublasReal ),
466
+ (:Adjoint , :CublasComplex ))
467
+ @eval begin
468
+ function LinearAlgebra. mul! (X:: DenseCuMatrix{T} ,
469
+ A:: UpperTriangular{T,<:DenseCuMatrix} ,
470
+ B:: LowerTriangular{<:Any,<:$trtype{T,<:DenseCuMatrix}} ,
471
+ ) where {T<: $valtype }
472
+ # operation is reversed to avoid executing the tranpose
473
+ triu! (parent (A))
474
+ CUBLAS. trmm! (' R' , ' U' , ' T' , ' N' , one (T), parent (parent (B)), parent (A), parent (X))
475
+ X
476
+ end
477
+
478
+ function LinearAlgebra. mul! (X:: DenseCuMatrix{T} ,
479
+ A:: UpperTriangular{<:Any,<:$trtype{T,<:DenseCuMatrix}} ,
480
+ B:: LowerTriangular{T,<:DenseCuMatrix} ,
481
+ ) where {T<: $valtype }
482
+ tril! (parent (B))
483
+ CUBLAS. trmm! (' L' , ' L' , ' T' , ' N' , one (T), parent (parent (A)), parent (B), parent (X))
484
+ X
485
+ end
486
+
487
+ function LinearAlgebra. mul! (X:: DenseCuMatrix{T} ,
488
+ A:: LowerTriangular{<:Any,<:$trtype{T,<:DenseCuMatrix}} ,
489
+ B:: UpperTriangular{T,<:DenseCuMatrix} ,
490
+ ) where {T<: $valtype }
491
+ triu! (parent (B))
492
+ CUBLAS. trmm! (' L' , ' U' , ' T' , ' N' , one (T), parent (parent (A)), parent (B), parent (X))
493
+ X
494
+ end
495
+
496
+ function LinearAlgebra. mul! (X:: DenseCuMatrix{T} ,
497
+ A:: LowerTriangular{T,<:DenseCuMatrix} ,
498
+ B:: UpperTriangular{<:Any,<:$trtype{T,<:DenseCuMatrix}} ,
499
+ ) where {T<: $valtype }
500
+ # operation is reversed to avoid executing the tranpose
501
+ tril! (parent (A))
502
+ CUBLAS. trmm! (' R' , ' L' , ' T' , ' N' , one (T), parent (parent (B)), parent (A), parent (X))
503
+ X
504
+ end
505
+ end
506
+ end
507
+
446
508
# symmetric mul!
447
509
# level 2
448
510
@inline function LinearAlgebra. mul! (y:: CuVector{T} , A:: Hermitian{T,<:CuMatrix} , x:: CuVector{T} ,
0 commit comments