You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: src/CellArray.jl
+15-12Lines changed: 15 additions & 12 deletions
Original file line number
Diff line number
Diff line change
@@ -145,18 +145,19 @@ See also: [`CellArray`](@ref), [`CPUCellArray`](@ref), [`ROCCellArray`](@ref)
145
145
146
146
See also: [`@define_ROCCellArray`](@ref)
147
147
"""
148
-
macrodefine_CuCellArray() esc(define_CuCellArray()) end
148
+
macrodefine_CuCellArray() esc(define_CuCellArray(__module__)) end
149
149
150
-
functiondefine_CuCellArray()
150
+
functiondefine_CuCellArray(caller::Module)
151
+
@eval caller import CUDA # NOTE: this is required for CUDA.@cuda to work (at least when running the unit tests), which is needed for the GPUCompiler bug workaround
CuCellArray{T,B}(::UndefInitializer, dims::NTuple{N,Int}) where {T<:CellArrays.Cell,N,B} = ( CellArrays.check_T(T); A =CuCellArray{T,N,B,CellArrays.eltype(T)}(undef, dims); f(A)=(CellArrays.plain_flat(A); CellArrays.plain_arrayflat(A); return); if (B in (0,1)) @cuda launch=false launch=falsef(A) end; A )
155
+
CuCellArray{T,B}(::UndefInitializer, dims::NTuple{N,Int}) where {T<:CellArrays.Cell,N,B} = ( CellArrays.check_T(T); A =CuCellArray{T,N,B,CellArrays.eltype(T)}(undef, dims); f(A)=(CellArrays.plain_flat(A); CellArrays.plain_arrayflat(A); return); if (B in (0,1)) CUDA.@cuda launch=falsef(A) end; A )
155
156
CuCellArray{T,B}(::UndefInitializer, dims::Vararg{Int, N}) where {T<:CellArrays.Cell,N,B} =CuCellArray{T,B}(undef, dims)
156
157
CuCellArray{T}(::UndefInitializer, dims::NTuple{N,Int}) where {T<:CellArrays.Cell,N} =CuCellArray{T,CellArrays.B0}(undef, dims)
157
158
CuCellArray{T}(::UndefInitializer, dims::Vararg{Int, N}) where {T<:CellArrays.Cell,N} =CuCellArray{T}(undef, dims)
158
159
159
-
CuCellArray(A::CellArrays.CellArray{T,N,B,T_array}) where {T,N,B,T_array} = (A = CellArrays.CellArray{T,N,B}(CUDA.CuArray(A.data), A.dims); f(A)=(CellArrays.plain_flat(A); CellArrays.plain_arrayflat(A); return); if (B in (0,1)) @cuda launch=falsef(A) end; A)
160
+
CuCellArray(A::CellArrays.CellArray{T,N,B,T_array}) where {T,N,B,T_array} = (A = CellArrays.CellArray{T,N,B}(CUDA.CuArray(A.data), A.dims); f(A)=(CellArrays.plain_flat(A); CellArrays.plain_arrayflat(A); return); if (B in (0,1)) CUDA.@cuda launch=falsef(A) end; A)
@@ -188,19 +189,20 @@ See also: [`CellArray`](@ref), [`CPUCellArray`](@ref), [`CuCellArray`](@ref)
188
189
189
190
See also: [`@define_CuCellArray`](@ref)
190
191
"""
191
-
macrodefine_ROCCellArray() esc(define_ROCCellArray()) end
192
+
macrodefine_ROCCellArray() esc(define_ROCCellArray(__module__)) end
192
193
193
-
functiondefine_ROCCellArray()
194
+
functiondefine_ROCCellArray(caller::Module)
195
+
@eval caller import AMDGPU # NOTE: this is required for AMDGPU.@roc to work (at least when running the unit tests), which is needed for the GPUCompiler bug workaround
194
196
quote
195
197
const ROCCellArray{T,N,B,T_elem} = CellArrays.CellArray{T,N,B,AMDGPU.ROCArray{T_elem,CellArrays._N}} #TODO: ,AMDGPU.Runtime.Mem.HIPBuffer should be added here later. The moment it has no impact (and would require adaption of the unit tests).
ROCCellArray{T,B}(::UndefInitializer, dims::NTuple{N,Int}) where {T<:CellArrays.Cell,N,B} = ( CellArrays.check_T(T); A =ROCCellArray{T,N,B,CellArrays.eltype(T)}(undef, dims); A ) #TODO: Once reshape is implemented in AMDGPU, the workaround can be applied as well: f(A)=(CellArrays.plain_flat(A); CellArrays.plain_arrayflat(A); return); if (B in (0,1)) @roc launch=false f(A) end; A )
200
+
ROCCellArray{T,B}(::UndefInitializer, dims::NTuple{N,Int}) where {T<:CellArrays.Cell,N,B} = ( CellArrays.check_T(T); A =ROCCellArray{T,N,B,CellArrays.eltype(T)}(undef, dims); A ) #TODO: Once reshape is implemented in AMDGPU, the workaround can be applied as well: f(A)=(CellArrays.plain_flat(A); CellArrays.plain_arrayflat(A); return); if (B in (0,1)) AMDGPU.@roc launch=false f(A) end; A )
199
201
ROCCellArray{T,B}(::UndefInitializer, dims::Vararg{Int, N}) where {T<:CellArrays.Cell,N,B} =ROCCellArray{T,B}(undef, dims)
200
202
ROCCellArray{T}(::UndefInitializer, dims::NTuple{N,Int}) where {T<:CellArrays.Cell,N} =ROCCellArray{T,CellArrays.B0}(undef, dims)
201
203
ROCCellArray{T}(::UndefInitializer, dims::Vararg{Int, N}) where {T<:CellArrays.Cell,N} =ROCCellArray{T}(undef, dims)
202
204
203
-
ROCCellArray(A::CellArrays.CellArray{T,N,B,T_array}) where {T,N,B,T_array} = ( A = CellArrays.CellArray{T,N,B}(AMDGPU.ROCArray(A.data), A.dims); A ) #TODO: Once reshape is implemented in AMDGPU, the workaround can be applied as well: f(A)=(CellArrays.plain_flat(A); CellArrays.plain_arrayflat(A); return); if (B in (0,1)) @roc launch=false f(A) end; A )
205
+
ROCCellArray(A::CellArrays.CellArray{T,N,B,T_array}) where {T,N,B,T_array} = ( A = CellArrays.CellArray{T,N,B}(AMDGPU.ROCArray(A.data), A.dims); A ) #TODO: Once reshape is implemented in AMDGPU, the workaround can be applied as well: f(A)=(CellArrays.plain_flat(A); CellArrays.plain_arrayflat(A); return); if (B in (0,1)) AMDGPU.@roc launch=false f(A) end; A )
@@ -234,19 +236,20 @@ See also: [`CellArray`](@ref), [`CPUCellArray`](@ref), [`CuCellArray`](@ref), [`
234
236
235
237
See also: [`@define_CuCellArray`](@ref), [`@define_ROCCellArray`](@ref)
236
238
"""
237
-
macrodefine_MtlCellArray() esc(define_MtlCellArray()) end
239
+
macrodefine_MtlCellArray() esc(define_MtlCellArray(__module__)) end
238
240
239
-
functiondefine_MtlCellArray()
241
+
functiondefine_MtlCellArray(caller::Module)
242
+
@eval caller import Metal # NOTE: this is required for Metal.@metal to work (at least when running the unit tests), which is needed for the GPUCompiler bug workaround
MtlCellArray{T,B}(::UndefInitializer, dims::NTuple{N,Int}) where {T<:CellArrays.Cell,N,B} = ( CellArrays.check_T(T); A =MtlCellArray{T,N,B,CellArrays.eltype(T)}(undef, dims); A) #workaround: f(A)=(CellArrays.plain_flat(A); CellArrays.plain_arrayflat(A); return); if (B in (0,1)) @metal launch=false f(A) end; A )
247
+
MtlCellArray{T,B}(::UndefInitializer, dims::NTuple{N,Int}) where {T<:CellArrays.Cell,N,B} = ( CellArrays.check_T(T); A =MtlCellArray{T,N,B,CellArrays.eltype(T)}(undef, dims); A) #workaround: f(A)=(CellArrays.plain_flat(A); CellArrays.plain_arrayflat(A); return); if (B in (0,1)) Metal.@metal launch=false f(A) end; A )
245
248
MtlCellArray{T,B}(::UndefInitializer, dims::Vararg{Int, N}) where {T<:CellArrays.Cell,N,B} =MtlCellArray{T,B}(undef, dims)
246
249
MtlCellArray{T}(::UndefInitializer, dims::NTuple{N,Int}) where {T<:CellArrays.Cell,N} =MtlCellArray{T,CellArrays.B0}(undef, dims)
247
250
MtlCellArray{T}(::UndefInitializer, dims::Vararg{Int, N}) where {T<:CellArrays.Cell,N} =MtlCellArray{T}(undef, dims)
248
251
249
-
MtlCellArray(A::CellArrays.CellArray{T,N,B,T_array}) where {T,N,B,T_array} = ( A = CellArrays.CellArray{T,N,B}(Metal.MtlArray(A.data), A.dims); A) #workaround: f(A)=(CellArrays.plain_flat(A); CellArrays.plain_arrayflat(A); return); if (B in (0,1)) @metal launch=false f(A) end; A )
252
+
MtlCellArray(A::CellArrays.CellArray{T,N,B,T_array}) where {T,N,B,T_array} = ( A = CellArrays.CellArray{T,N,B}(Metal.MtlArray(A.data), A.dims); A) #workaround: f(A)=(CellArrays.plain_flat(A); CellArrays.plain_arrayflat(A); return); if (B in (0,1)) Metal.@metal launch=false f(A) end; A )
0 commit comments