Skip to content

Commit 555bc3f

Browse files
committed
add and use a blas_suffix macro for all blas and lapack symbols
1 parent 7f596d4 commit 555bc3f

File tree

3 files changed

+247
-239
lines changed

3 files changed

+247
-239
lines changed

base/linalg/blas.jl

+91-91
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
module BLAS
22

33
import ..axpy!
4-
import Base.copy!
4+
import Base: copy!, @blas_suffix
55

66
export
77
# Level 1
@@ -57,10 +57,10 @@ import ..LinAlg: BlasReal, BlasComplex, BlasFloat, BlasChar, BlasInt, blas_int,
5757

5858
# Level 1
5959
## copy
60-
for (fname, elty) in ((:dcopy_,:Float64),
61-
(:scopy_,:Float32),
62-
(:zcopy_,:Complex128),
63-
(:ccopy_,:Complex64))
60+
for (fname, elty) in ((@blas_suffix(:dcopy_),:Float64),
61+
(@blas_suffix(:scopy_),:Float32),
62+
(@blas_suffix(:zcopy_),:Complex128),
63+
(@blas_suffix(:ccopy_),:Complex64))
6464
@eval begin
6565
# SUBROUTINE DCOPY(N,DX,INCX,DY,INCY)
6666
function blascopy!(n::Integer, DX::Union(Ptr{$elty},StridedArray{$elty}), incx::Integer, DY::Union(Ptr{$elty},StridedArray{$elty}), incy::Integer)
@@ -73,10 +73,10 @@ for (fname, elty) in ((:dcopy_,:Float64),
7373
end
7474

7575
## scal
76-
for (fname, elty) in ((:dscal_,:Float64),
77-
(:sscal_,:Float32),
78-
(:zscal_,:Complex128),
79-
(:cscal_,:Complex64))
76+
for (fname, elty) in ((@blas_suffix(:dscal_),:Float64),
77+
(@blas_suffix(:sscal_),:Float32),
78+
(@blas_suffix(:zscal_),:Complex128),
79+
(@blas_suffix(:cscal_),:Complex64))
8080
@eval begin
8181
# SUBROUTINE DSCAL(N,DA,DX,INCX)
8282
function scal!(n::Integer, DA::$elty, DX::Union(Ptr{$elty},StridedArray{$elty}), incx::Integer)
@@ -89,8 +89,8 @@ for (fname, elty) in ((:dscal_,:Float64),
8989
end
9090
scal(n, DA, DX, incx) = scal!(n, DA, copy(DX), incx)
9191
# In case DX is complex, and DA is real, use dscal/sscal to save flops
92-
for (fname, elty, celty) in ((:sscal_, :Float32, :Complex64),
93-
(:dscal_, :Float64, :Complex128))
92+
for (fname, elty, celty) in ((@blas_suffix(:sscal_), :Float32, :Complex64),
93+
(@blas_suffix(:dscal_), :Float64, :Complex128))
9494
@eval begin
9595
function scal!(n::Integer, DA::$elty, DX::Union(Ptr{$celty},StridedArray{$celty}), incx::Integer)
9696
ccall(($(string(fname)),libblas), Void,
@@ -102,8 +102,8 @@ for (fname, elty, celty) in ((:sscal_, :Float32, :Complex64),
102102
end
103103

104104
## dot
105-
for (fname, elty) in ((:ddot_,:Float64),
106-
(:sdot_,:Float32))
105+
for (fname, elty) in ((@blas_suffix(:ddot_),:Float64),
106+
(@blas_suffix(:sdot_),:Float32))
107107
@eval begin
108108
# DOUBLE PRECISION FUNCTION DDOT(N,DX,INCX,DY,INCY)
109109
# * .. Scalar Arguments ..
@@ -118,8 +118,8 @@ for (fname, elty) in ((:ddot_,:Float64),
118118
end
119119
end
120120
end
121-
for (fname, elty) in ((:cblas_zdotc_sub,:Complex128),
122-
(:cblas_cdotc_sub,:Complex64))
121+
for (fname, elty) in ((@blas_suffix(:cblas_zdotc_sub),:Complex128),
122+
(@blas_suffix(:cblas_cdotc_sub),:Complex64))
123123
@eval begin
124124
# DOUBLE PRECISION FUNCTION DDOT(N,DX,INCX,DY,INCY)
125125
# * .. Scalar Arguments ..
@@ -136,8 +136,8 @@ for (fname, elty) in ((:cblas_zdotc_sub,:Complex128),
136136
end
137137
end
138138
end
139-
for (fname, elty) in ((:cblas_zdotu_sub,:Complex128),
140-
(:cblas_cdotu_sub,:Complex64))
139+
for (fname, elty) in ((@blas_suffix(:cblas_zdotu_sub),:Complex128),
140+
(@blas_suffix(:cblas_cdotu_sub),:Complex64))
141141
@eval begin
142142
# DOUBLE PRECISION FUNCTION DDOT(N,DX,INCX,DY,INCY)
143143
# * .. Scalar Arguments ..
@@ -171,10 +171,10 @@ function dotu{T<:BlasComplex}(DX::StridedArray{T}, DY::StridedArray{T})
171171
end
172172

173173
## nrm2
174-
for (fname, elty, ret_type) in ((:dnrm2_,:Float64,:Float64),
175-
(:snrm2_,:Float32,:Float32),
176-
(:dznrm2_,:Complex128,:Float64),
177-
(:scnrm2_,:Complex64,:Float32))
174+
for (fname, elty, ret_type) in ((@blas_suffix(:dnrm2_),:Float64,:Float64),
175+
(@blas_suffix(:snrm2_),:Float32,:Float32),
176+
(@blas_suffix(:dznrm2_),:Complex128,:Float64),
177+
(@blas_suffix(:scnrm2_),:Complex64,:Float32))
178178
@eval begin
179179
# SUBROUTINE DNRM2(N,X,INCX)
180180
function nrm2(n::Integer, X::Union(Ptr{$elty},StridedVector{$elty}), incx::Integer)
@@ -188,10 +188,10 @@ nrm2(x::StridedVector) = nrm2(length(x), x, stride(x,1))
188188
nrm2(x::Array) = nrm2(length(x), pointer(x), 1)
189189

190190
## asum
191-
for (fname, elty, ret_type) in ((:dasum_,:Float64,:Float64),
192-
(:sasum_,:Float32,:Float32),
193-
(:dzasum_,:Complex128,:Float64),
194-
(:scasum_,:Complex64,:Float32))
191+
for (fname, elty, ret_type) in ((@blas_suffix(:dasum_),:Float64,:Float64),
192+
(@blas_suffix(:sasum_),:Float32,:Float32),
193+
(@blas_suffix(:dzasum_),:Complex128,:Float64),
194+
(@blas_suffix(:scasum_),:Complex64,:Float32))
195195
@eval begin
196196
# SUBROUTINE ASUM(N, X, INCX)
197197
function asum(n::Integer, X::Union(Ptr{$elty},StridedVector{$elty}), incx::Integer)
@@ -205,10 +205,10 @@ asum(x::StridedVector) = asum(length(x), x, stride(x,1))
205205
asum(x::Array) = asum(length(x), pointer(x), 1)
206206

207207
## axpy
208-
for (fname, elty) in ((:daxpy_,:Float64),
209-
(:saxpy_,:Float32),
210-
(:zaxpy_,:Complex128),
211-
(:caxpy_,:Complex64))
208+
for (fname, elty) in ((@blas_suffix(:daxpy_),:Float64),
209+
(@blas_suffix(:saxpy_),:Float32),
210+
(@blas_suffix(:zaxpy_),:Complex128),
211+
(@blas_suffix(:caxpy_),:Complex64))
212212
@eval begin
213213
# SUBROUTINE DAXPY(N,DA,DX,INCX,DY,INCY)
214214
# DY <- DA*DX + DY
@@ -243,10 +243,10 @@ function axpy!{T<:BlasFloat,Ta<:Number,Ti<:Integer}(alpha::Ta, x::Array{T}, rx::
243243
end
244244

245245
## iamax
246-
for (fname, elty) in ((:idamax_,:Float64),
247-
(:isamax_,:Float32),
248-
(:izamax_,:Complex128),
249-
(:icamax_,:Complex64))
246+
for (fname, elty) in ((@blas_suffix(:idamax_),:Float64),
247+
(@blas_suffix(:isamax_),:Float32),
248+
(@blas_suffix(:izamax_),:Complex128),
249+
(@blas_suffix(:icamax_),:Complex64))
250250
@eval begin
251251
function iamax(n::BlasInt, dx::Union(StridedVector{$elty}, Ptr{$elty}), incx::BlasInt)
252252
ccall(($(string(fname)), libblas),BlasInt,
@@ -260,10 +260,10 @@ iamax(dx::StridedVector) = iamax(length(dx), dx, 1)
260260
# Level 2
261261
## mv
262262
### gemv
263-
for (fname, elty) in ((:dgemv_,:Float64),
264-
(:sgemv_,:Float32),
265-
(:zgemv_,:Complex128),
266-
(:cgemv_,:Complex64))
263+
for (fname, elty) in ((@blas_suffix(:dgemv_),:Float64),
264+
(@blas_suffix(:sgemv_),:Float32),
265+
(@blas_suffix(:zgemv_),:Complex128),
266+
(@blas_suffix(:cgemv_),:Complex64))
267267
@eval begin
268268
#SUBROUTINE DGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
269269
#* .. Scalar Arguments ..
@@ -294,10 +294,10 @@ for (fname, elty) in ((:dgemv_,:Float64),
294294
end
295295

296296
### (GB) general banded matrix-vector multiplication
297-
for (fname, elty) in ((:dgbmv_,:Float64),
298-
(:sgbmv_,:Float32),
299-
(:zgbmv_,:Complex128),
300-
(:cgbmv_,:Complex64))
297+
for (fname, elty) in ((@blas_suffix(:dgbmv_),:Float64),
298+
(@blas_suffix(:sgbmv_),:Float32),
299+
(@blas_suffix(:zgbmv_),:Complex128),
300+
(@blas_suffix(:cgbmv_),:Complex64))
301301
@eval begin
302302
# SUBROUTINE DGBMV(TRANS,M,N,KL,KU,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
303303
# * .. Scalar Arguments ..
@@ -329,10 +329,10 @@ for (fname, elty) in ((:dgbmv_,:Float64),
329329
end
330330

331331
### symv
332-
for (fname, elty) in ((:dsymv_,:Float64),
333-
(:ssymv_,:Float32),
334-
(:zsymv_,:Complex128),
335-
(:csymv_,:Complex64))
332+
for (fname, elty) in ((@blas_suffix(:dsymv_),:Float64),
333+
(@blas_suffix(:ssymv_),:Float32),
334+
(@blas_suffix(:zsymv_),:Complex128),
335+
(@blas_suffix(:csymv_),:Complex64))
336336
# Note that the complex symv are not BLAS but auiliary functions in LAPACK
337337
@eval begin
338338
# SUBROUTINE DSYMV(UPLO,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
@@ -365,8 +365,8 @@ for (fname, elty) in ((:dsymv_,:Float64),
365365
end
366366

367367
### hemv
368-
for (fname, elty) in ((:zhemv_,:Complex128),
369-
(:chemv_,:Complex64))
368+
for (fname, elty) in ((@blas_suffix(:zhemv_),:Complex128),
369+
(@blas_suffix(:chemv_),:Complex64))
370370
@eval begin
371371
function hemv!(uplo::Char, α::$elty, A::StridedMatrix{$elty}, x::StridedVector{$elty}, β::$elty, y::StridedVector{$elty})
372372
n = size(A, 2)
@@ -394,10 +394,10 @@ for (fname, elty) in ((:zhemv_,:Complex128),
394394
end
395395

396396
### sbmv, (SB) symmetric banded matrix-vector multiplication
397-
for (fname, elty) in ((:dsbmv_,:Float64),
398-
(:ssbmv_,:Float32),
399-
(:zsbmv_,:Complex128),
400-
(:csbmv_,:Complex64))
397+
for (fname, elty) in ((@blas_suffix(:dsbmv_),:Float64),
398+
(@blas_suffix(:ssbmv_),:Float32),
399+
(@blas_suffix(:zsbmv_),:Complex128),
400+
(@blas_suffix(:csbmv_),:Complex64))
401401
@eval begin
402402
# SUBROUTINE DSBMV(UPLO,N,K,ALPHA,A,LDA,X,INCX,BETA,Y,INCY)
403403
# * .. Scalar Arguments ..
@@ -427,10 +427,10 @@ for (fname, elty) in ((:dsbmv_,:Float64),
427427
end
428428

429429
### trmv, Triangular matrix-vector multiplication
430-
for (fname, elty) in ((:dtrmv_,:Float64),
431-
(:strmv_,:Float32),
432-
(:ztrmv_,:Complex128),
433-
(:ctrmv_,:Complex64))
430+
for (fname, elty) in ((@blas_suffix(:dtrmv_),:Float64),
431+
(@blas_suffix(:strmv_),:Float32),
432+
(@blas_suffix(:ztrmv_),:Complex128),
433+
(@blas_suffix(:ctrmv_),:Complex64))
434434
@eval begin
435435
# SUBROUTINE DTRMV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX)
436436
# * .. Scalar Arguments ..
@@ -456,10 +456,10 @@ for (fname, elty) in ((:dtrmv_,:Float64),
456456
end
457457
end
458458
### trsv, Triangular matrix-vector solve
459-
for (fname, elty) in ((:dtrsv_,:Float64),
460-
(:strsv_,:Float32),
461-
(:ztrsv_,:Complex128),
462-
(:ctrsv_,:Complex64))
459+
for (fname, elty) in ((@blas_suffix(:dtrsv_),:Float64),
460+
(@blas_suffix(:strsv_),:Float32),
461+
(@blas_suffix(:ztrsv_),:Complex128),
462+
(@blas_suffix(:ctrsv_),:Complex64))
463463
@eval begin
464464
# SUBROUTINE DTRSV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX)
465465
# .. Scalar Arguments ..
@@ -484,10 +484,10 @@ for (fname, elty) in ((:dtrsv_,:Float64),
484484
end
485485

486486
### ger
487-
for (fname, elty) in ((:dger_,:Float64),
488-
(:sger_,:Float32),
489-
(:zgerc_,:Complex128),
490-
(:cgerc_,:Complex64))
487+
for (fname, elty) in ((@blas_suffix(:dger_),:Float64),
488+
(@blas_suffix(:sger_),:Float32),
489+
(@blas_suffix(:zgerc_),:Complex128),
490+
(@blas_suffix(:cgerc_),:Complex64))
491491
@eval begin
492492
function ger!::$elty, x::StridedVector{$elty}, y::StridedVector{$elty}, A::StridedMatrix{$elty})
493493
m, n = size(A)
@@ -506,10 +506,10 @@ for (fname, elty) in ((:dger_,:Float64),
506506
end
507507

508508
### syr
509-
for (fname, elty) in ((:dsyr_,:Float64),
510-
(:ssyr_,:Float32),
511-
(:zsyr_,:Complex128),
512-
(:csyr_,:Complex64))
509+
for (fname, elty) in ((@blas_suffix(:dsyr_),:Float64),
510+
(@blas_suffix(:ssyr_),:Float32),
511+
(@blas_suffix(:zsyr_),:Complex128),
512+
(@blas_suffix(:csyr_),:Complex64))
513513
@eval begin
514514
function syr!(uplo::Char, α::$elty, x::StridedVector{$elty}, A::StridedMatrix{$elty})
515515
n = chksquare(A)
@@ -525,8 +525,8 @@ for (fname, elty) in ((:dsyr_,:Float64),
525525
end
526526

527527
### her
528-
for (fname, elty) in ((:zher_,:Complex128),
529-
(:cher_,:Complex64))
528+
for (fname, elty) in ((@blas_suffix(:zher_),:Complex128),
529+
(@blas_suffix(:cher_),:Complex64))
530530
@eval begin
531531
function her!(uplo::Char, α::$elty, x::StridedVector{$elty}, A::StridedMatrix{$elty})
532532
n = chksquare(A)
@@ -544,10 +544,10 @@ end
544544
# Level 3
545545
## (GE) general matrix-matrix multiplication
546546
for (gemm, elty) in
547-
((:dgemm_,:Float64),
548-
(:sgemm_,:Float32),
549-
(:zgemm_,:Complex128),
550-
(:cgemm_,:Complex64))
547+
((@blas_suffix(:dgemm_),:Float64),
548+
(@blas_suffix(:sgemm_),:Float32),
549+
(@blas_suffix(:zgemm_),:Complex128),
550+
(@blas_suffix(:cgemm_),:Complex64))
551551
@eval begin
552552
# SUBROUTINE DGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
553553
# * .. Scalar Arguments ..
@@ -587,10 +587,10 @@ for (gemm, elty) in
587587
end
588588

589589
## (SY) symmetric matrix-matrix and matrix-vector multiplication
590-
for (mfname, elty) in ((:dsymm_,:Float64),
591-
(:ssymm_,:Float32),
592-
(:zsymm_,:Complex128),
593-
(:csymm_,:Complex64))
590+
for (mfname, elty) in ((@blas_suffix(:dsymm_),:Float64),
591+
(@blas_suffix(:ssymm_),:Float32),
592+
(@blas_suffix(:zsymm_),:Complex128),
593+
(@blas_suffix(:csymm_),:Complex64))
594594
@eval begin
595595
# SUBROUTINE DSYMM(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
596596
# .. Scalar Arguments ..
@@ -622,10 +622,10 @@ for (mfname, elty) in ((:dsymm_,:Float64),
622622
end
623623

624624
## syrk
625-
for (fname, elty) in ((:dsyrk_,:Float64),
626-
(:ssyrk_,:Float32),
627-
(:zsyrk_,:Complex128),
628-
(:csyrk_,:Complex64))
625+
for (fname, elty) in ((@blas_suffix(:dsyrk_),:Float64),
626+
(@blas_suffix(:ssyrk_),:Float32),
627+
(@blas_suffix(:zsyrk_),:Complex128),
628+
(@blas_suffix(:csyrk_),:Complex64))
629629
@eval begin
630630
# SUBROUTINE DSYRK(UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC)
631631
# * .. Scalar Arguments ..
@@ -659,7 +659,7 @@ function syrk(uplo::BlasChar, trans::BlasChar, alpha::Number, A::StridedVecOrMat
659659
end
660660
syrk(uplo::BlasChar, trans::BlasChar, A::StridedVecOrMat) = syrk(uplo, trans, one(eltype(A)), A)
661661

662-
for (fname, elty) in ((:zherk_,:Complex128), (:cherk_,:Complex64))
662+
for (fname, elty) in ((@blas_suffix(:zherk_),:Complex128), (@blas_suffix(:cherk_),:Complex64))
663663
@eval begin
664664
# SUBROUTINE CHERK(UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC)
665665
# * .. Scalar Arguments ..
@@ -692,10 +692,10 @@ for (fname, elty) in ((:zherk_,:Complex128), (:cherk_,:Complex64))
692692
end
693693

694694
## syr2k
695-
for (fname, elty) in ((:dsyr2k_,:Float64),
696-
(:ssyr2k_,:Float32),
697-
(:zsyr2k_,:Complex128),
698-
(:csyr2k_,:Complex64))
695+
for (fname, elty) in ((@blas_suffix(:dsyr2k_),:Float64),
696+
(@blas_suffix(:ssyr2k_),:Float32),
697+
(@blas_suffix(:zsyr2k_),:Complex128),
698+
(@blas_suffix(:csyr2k_),:Complex64))
699699
@eval begin
700700
# SUBROUTINE DSYR2K(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
701701
#
@@ -731,7 +731,7 @@ function syr2k(uplo::BlasChar, trans::BlasChar, alpha::Number, A::StridedVecOrMa
731731
end
732732
syr2k(uplo::BlasChar, trans::BlasChar, A::StridedVecOrMat, B::StridedVecOrMat) = syr2k(uplo, trans, one(eltype(A)), A, B)
733733

734-
for (fname, elty1, elty2) in ((:zher2k_,:Complex128,:Float64), (:cher2k_,:Complex64,:Float32))
734+
for (fname, elty1, elty2) in ((@blas_suffix(:zher2k_),:Complex128,:Float64), (@blas_suffix(:cher2k_),:Complex64,:Float32))
735735
@eval begin
736736
# SUBROUTINE CHER2K(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
737737
#
@@ -768,10 +768,10 @@ end
768768

769769
## (TR) Triangular matrix and vector multiplication and solution
770770
for (mmname, smname, elty) in
771-
((:dtrmm_,:dtrsm_,:Float64),
772-
(:strmm_,:strsm_,:Float32),
773-
(:ztrmm_,:ztrsm_,:Complex128),
774-
(:ctrmm_,:ctrsm_,:Complex64))
771+
((@blas_suffix(:dtrmm_),@blas_suffix(:dtrsm_),:Float64),
772+
(@blas_suffix(:strmm_),@blas_suffix(:strsm_),:Float32),
773+
(@blas_suffix(:ztrmm_),@blas_suffix(:ztrsm_),:Complex128),
774+
(@blas_suffix(:ctrmm_),@blas_suffix(:ctrsm_),:Complex64))
775775
@eval begin
776776
# SUBROUTINE DTRMM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB)
777777
# * .. Scalar Arguments ..

0 commit comments

Comments
 (0)