1
1
import Base. Operators .(* )
2
2
3
- import Base: scale!, scale, norm, vecdot
3
+ import Base: scale!, norm, vecdot
4
4
5
5
import Base: A_mul_B!, At_mul_B, Ac_mul_B, A_mul_Bc, At_mul_Bt, Ac_mul_Bc, At_mul_Bt,
6
6
At_mul_B!, Ac_mul_B!, A_mul_Bc!, At_mul_Bt!, Ac_mul_Bc!, At_mul_Bt!
7
7
8
- cublas_size (t:: Char , M:: CudaVecOrMat ) = (size (M, t== ' N' ? 1 : 2 ), size (M, t== ' N' ? 2 : 1 ))
8
+ cublas_size (t:: Char , M:: CuVecOrMat ) = (size (M, t== ' N' ? 1 : 2 ), size (M, t== ' N' ? 2 : 1 ))
9
9
10
10
# ##########
11
11
#
@@ -16,13 +16,12 @@ cublas_size(t::Char, M::CudaVecOrMat) = (size(M, t=='N' ? 1:2), size(M, t=='N' ?
16
16
# ######
17
17
# SCAL
18
18
# ######
19
- scale! {T<:CublasFloat} (x:: CudaArray{T} , k:: Number ) = CUBLAS. scal! (length (x), k, x, 1 )
20
- scale {T<:CublasFloat} (x:: CudaArray{T} , k:: Number ) = CUBLAS. scal! (length (x), k, copy (x), 1 )
19
+ scale! {T<:CublasFloat} (x:: CuArray{T} , k:: Number ) = CUBLAS. scal! (length (x), k, x, 1 )
21
20
22
21
# ######
23
22
# DOT
24
23
# ######
25
- function dot {T <: CublasFloat, TI<:Integer} (x:: CudaVector {T} , rx:: Union{UnitRange{TI},Range{TI}} , y:: CudaVector {T} , ry:: Union{UnitRange{TI},Range{TI}} )
24
+ function dot {T <: CublasFloat, TI<:Integer} (x:: CuVector {T} , rx:: Union{UnitRange{TI},Range{TI}} , y:: CuVector {T} , ry:: Union{UnitRange{TI},Range{TI}} )
26
25
if length (rx) != length (ry)
27
26
throw (DimensionMismatch (" length of rx, $(length (rx)) , does not equal length of ry, $(length (ry)) " ))
28
27
end
@@ -35,17 +34,17 @@ function dot{T <: CublasFloat, TI<:Integer}(x::CudaVector{T}, rx::Union{UnitRang
35
34
dot (length (rx), pointer (x)+ (first (rx)- 1 )* sizeof (T), step (rx), pointer (y)+ (first (ry)- 1 )* sizeof (T), step (ry))
36
35
end
37
36
38
- At_mul_B {T<:CublasReal} (x:: CudaVector {T} , y:: CudaVector {T} ) = [CUBLAS. dot (x, y)]
39
- At_mul_B {T<:CublasComplex} (x:: CudaVector {T} , y:: CudaVector {T} ) = [CUBLAS. dotu (x, y)]
40
- Ac_mul_B {T<:CublasComplex} (x:: CudaVector {T} , y:: CudaVector {T} ) = [CUBLAS. dotc (x, y)]
37
+ At_mul_B {T<:CublasReal} (x:: CuVector {T} , y:: CuVector {T} ) = [CUBLAS. dot (x, y)]
38
+ At_mul_B {T<:CublasComplex} (x:: CuVector {T} , y:: CuVector {T} ) = [CUBLAS. dotu (x, y)]
39
+ Ac_mul_B {T<:CublasComplex} (x:: CuVector {T} , y:: CuVector {T} ) = [CUBLAS. dotc (x, y)]
41
40
42
- vecdot {T<:CublasReal} (x:: CudaVector {T} , y:: CudaVector {T} ) = dot (x, y)
43
- vecdot {T<:CublasComplex} (x:: CudaVector {T} , y:: CudaVector {T} ) = dotc (x, y)
41
+ vecdot {T<:CublasReal} (x:: CuVector {T} , y:: CuVector {T} ) = dot (x, y)
42
+ vecdot {T<:CublasComplex} (x:: CuVector {T} , y:: CuVector {T} ) = dotc (x, y)
44
43
45
44
# ######
46
45
# NRM2
47
46
# ######
48
- norm (x:: CudaArray ) = nrm2 (x)
47
+ norm (x:: CuArray ) = nrm2 (x)
49
48
50
49
51
50
# ###########
@@ -58,7 +57,7 @@ norm(x::CudaArray) = nrm2(x)
58
57
# ########
59
58
# GEMV
60
59
# #########
61
- function gemv_wrapper! {T<:CublasFloat} (y:: CudaVector {T} , tA:: Char , A:: CudaMatrix {T} , x:: CudaVector {T} ,
60
+ function gemv_wrapper! {T<:CublasFloat} (y:: CuVector {T} , tA:: Char , A:: CuMatrix {T} , x:: CuVector {T} ,
62
61
alpha = one (T), beta = zero (T))
63
62
mA, nA = cublas_size (tA, A)
64
63
if nA != length (x)
@@ -76,20 +75,20 @@ function gemv_wrapper!{T<:CublasFloat}(y::CudaVector{T}, tA::Char, A::CudaMatrix
76
75
gemv! (tA, alpha, A, x, beta, y)
77
76
end
78
77
79
- A_mul_B! {T<:CublasFloat} (y:: CudaVector {T} , A:: CudaMatrix {T} , x:: CudaVector {T} ) = gemv_wrapper! (y, ' N' , A, x)
80
- At_mul_B! {T<:CublasFloat} (y:: CudaVector {T} , A:: CudaMatrix {T} , x:: CudaVector {T} ) = gemv_wrapper! (y, ' T' , A, x)
81
- Ac_mul_B! {T<:CublasFloat} (y:: CudaVector {T} , A:: CudaMatrix {T} , x:: CudaVector {T} ) = gemv_wrapper! (y, ' T' , A, x)
82
- Ac_mul_B! {T<:CublasComplex} (y:: CudaVector {T} , A:: CudaMatrix {T} , x:: CudaVector {T} ) = gemv_wrapper! (y, ' C' , A, x)
78
+ A_mul_B! {T<:CublasFloat} (y:: CuVector {T} , A:: CuMatrix {T} , x:: CuVector {T} ) = gemv_wrapper! (y, ' N' , A, x)
79
+ At_mul_B! {T<:CublasFloat} (y:: CuVector {T} , A:: CuMatrix {T} , x:: CuVector {T} ) = gemv_wrapper! (y, ' T' , A, x)
80
+ Ac_mul_B! {T<:CublasFloat} (y:: CuVector {T} , A:: CuMatrix {T} , x:: CuVector {T} ) = gemv_wrapper! (y, ' T' , A, x)
81
+ Ac_mul_B! {T<:CublasComplex} (y:: CuVector {T} , A:: CuMatrix {T} , x:: CuVector {T} ) = gemv_wrapper! (y, ' C' , A, x)
83
82
84
- function (* ){T<: CublasFloat }(A:: CudaMatrix {T} , x:: CudaVector {T} )
83
+ function (* ){T<: CublasFloat }(A:: CuMatrix {T} , x:: CuVector {T} )
85
84
A_mul_B! (similar (x, T, size (A,1 )), A, x)
86
85
end
87
86
88
- function At_mul_B {T<:CublasFloat} (A:: CudaMatrix {T} , x:: CudaVector {T} )
87
+ function At_mul_B {T<:CublasFloat} (A:: CuMatrix {T} , x:: CuVector {T} )
89
88
At_mul_B! (similar (x, T, size (A,2 )), A, x)
90
89
end
91
90
92
- function Ac_mul_B {T<:CublasFloat} (A:: CudaMatrix {T} , x:: CudaVector {T} )
91
+ function Ac_mul_B {T<:CublasFloat} (A:: CuMatrix {T} , x:: CuVector {T} )
93
92
Ac_mul_B! (similar (x, T, size (A,2 )), A, x)
94
93
end
95
94
103
102
# #######
104
103
# GEMM
105
104
# #######
106
- function gemm_wrapper! {T <: CublasFloat} (C:: CudaVecOrMat {T} , tA:: Char , tB:: Char ,
107
- A:: CudaVecOrMat {T} ,
108
- B:: CudaVecOrMat {T} ,
105
+ function gemm_wrapper! {T <: CublasFloat} (C:: CuVecOrMat {T} , tA:: Char , tB:: Char ,
106
+ A:: CuVecOrMat {T} ,
107
+ B:: CuVecOrMat {T} ,
109
108
alpha = one (T),
110
109
beta = zero (T))
111
110
mA, nA = cublas_size (tA, A)
@@ -130,51 +129,49 @@ function gemm_wrapper!{T <: CublasFloat}(C::CudaVecOrMat{T}, tA::Char, tB::Char,
130
129
end
131
130
132
131
# Mutating
133
- A_mul_B! {T <: CublasFloat} (C:: CudaMatrix {T} , A:: CudaMatrix {T} , B:: CudaMatrix {T} ) = gemm_wrapper! (C, ' N' , ' N' , A, B)
134
- At_mul_B! (C:: CudaMatrix , A:: CudaMatrix , B:: CudaMatrix ) = gemm_wrapper! (C, ' T' , ' N' , A, B)
135
- At_mul_Bt! (C:: CudaMatrix , A:: CudaMatrix , B:: CudaMatrix ) = gemm_wrapper! (C, ' T' , ' T' , A, B)
136
- Ac_mul_B! {T<:CublasReal} (C:: CudaMatrix {T} , A:: CudaMatrix {T} , B:: CudaMatrix {T} ) = At_mul_B! (C, A, B)
137
- Ac_mul_B! (C:: CudaMatrix , A:: CudaMatrix , B:: CudaMatrix ) = gemm_wrapper! (C, ' C' , ' N' , A, B)
132
+ A_mul_B! {T <: CublasFloat} (C:: CuMatrix {T} , A:: CuMatrix {T} , B:: CuMatrix {T} ) = gemm_wrapper! (C, ' N' , ' N' , A, B)
133
+ At_mul_B! (C:: CuMatrix , A:: CuMatrix , B:: CuMatrix ) = gemm_wrapper! (C, ' T' , ' N' , A, B)
134
+ At_mul_Bt! (C:: CuMatrix , A:: CuMatrix , B:: CuMatrix ) = gemm_wrapper! (C, ' T' , ' T' , A, B)
135
+ Ac_mul_B! {T<:CublasReal} (C:: CuMatrix {T} , A:: CuMatrix {T} , B:: CuMatrix {T} ) = At_mul_B! (C, A, B)
136
+ Ac_mul_B! (C:: CuMatrix , A:: CuMatrix , B:: CuMatrix ) = gemm_wrapper! (C, ' C' , ' N' , A, B)
138
137
139
- function A_mul_B! {T} (C:: CudaMatrix {T} , A:: CudaVecOrMat {T} , B:: CudaVecOrMat {T} )
138
+ function A_mul_B! {T} (C:: CuMatrix {T} , A:: CuVecOrMat {T} , B:: CuVecOrMat {T} )
140
139
gemm_wrapper! (C, ' N' , ' N' , A, B)
141
140
end
142
141
143
142
# Non mutating
144
143
145
144
# A_mul_Bx
146
- function (* ){T <: CublasFloat }(A:: CudaMatrix {T} , B:: CudaMatrix {T} )
145
+ function (* ){T <: CublasFloat }(A:: CuMatrix {T} , B:: CuMatrix {T} )
147
146
A_mul_B! (similar (B, T,(size (A,1 ), size (B,2 ))), A, B)
148
147
end
149
148
150
- function A_mul_Bt {T} (A:: CudaMatrix {T} , B:: CudaMatrix {T} )
149
+ function A_mul_Bt {T} (A:: CuMatrix {T} , B:: CuMatrix {T} )
151
150
A_mul_Bt! (similar (B, T, (size (A,1 ), size (B,1 ))), A, B)
152
151
end
153
152
154
- function A_mul_Bc {T} (A:: CudaMatrix {T} , B:: CudaMatrix {T} )
153
+ function A_mul_Bc {T} (A:: CuMatrix {T} , B:: CuMatrix {T} )
155
154
A_mul_Bc! (similar (B, T,(size (A,1 ),size (B,1 ))),A, B)
156
155
end
157
156
158
157
# At_mul_Bx
159
- function At_mul_B {T} (A:: CudaMatrix {T} , B:: CudaMatrix {T} )
158
+ function At_mul_B {T} (A:: CuMatrix {T} , B:: CuMatrix {T} )
160
159
At_mul_B! (similar (B, T, (size (A,2 ), size (B,2 ))), A, B)
161
160
end
162
161
163
- function At_mul_Bt {T} (A:: CudaMatrix {T} , B:: CudaMatrix {T} )
162
+ function At_mul_Bt {T} (A:: CuMatrix {T} , B:: CuMatrix {T} )
164
163
At_mul_Bt! (similar (B, T, (size (A,2 ), size (B,1 ))), A, B)
165
164
end
166
165
167
166
# Ac_mul_Bx
168
- function Ac_mul_B {T} (A:: CudaMatrix {T} , B:: CudaMatrix {T} )
167
+ function Ac_mul_B {T} (A:: CuMatrix {T} , B:: CuMatrix {T} )
169
168
Ac_mul_B! (similar (B, T, (size (A,2 ), size (B,2 ))), A, B)
170
169
end
171
170
172
- function Ac_mul_Bt {T,S} (A:: CudaMatrix {T} , B:: CudaMatrix {S} )
171
+ function Ac_mul_Bt {T,S} (A:: CuMatrix {T} , B:: CuMatrix {S} )
173
172
Ac_mul_Bt (similar (B, T, (size (A,2 ), size (B,1 ))), A, B)
174
173
end
175
174
176
- function Ac_mul_Bc {T,S} (A:: CudaMatrix {T} , B:: CudaMatrix {S} )
175
+ function Ac_mul_Bc {T,S} (A:: CuMatrix {T} , B:: CuMatrix {S} )
177
176
Ac_mul_Bc! (similar (B, T, (size (A,2 ), size (B,1 ))), A, B)
178
177
end
179
-
180
-
0 commit comments