Skip to content

Commit 5990d37

Browse files
committed
Add Kernel helper for KA kernels
1 parent 1e0cc54 commit 5990d37

2 files changed

Lines changed: 46 additions & 1 deletion

File tree

src/DaggerGPU.jl

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,17 @@ import Dagger: Chunk
88

99
const CPUProc = Union{OSProc, Dagger.ThreadProc}
1010

11+
struct Kernel{F} end
12+
Kernel(f) = Kernel{f}()
13+
14+
function (::Kernel{F})(args...; ndrange) where F
15+
@nospecialize args
16+
dev = kernel_backend()
17+
kern = F(dev)
18+
kern(args...; ndrange)
19+
KernelAbstractions.synchronize(dev)
20+
end
21+
1122
macro gpuproc(PROC, T)
1223
PROC = esc(PROC)
1324
T = esc(T)

test/runtests.jl

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,15 @@ addprocs(2, exeflags="--project")
1313
catch end
1414

1515
using Distributed, Dagger, DaggerGPU
16+
import DaggerGPU: Kernel
1617
using KernelAbstractions
1718
end
1819
@everywhere begin
1920
function isongpu(X)
2021
return !(X isa Array)
2122
end
2223

23-
KernelAbstractions.@kernel function fill_kernel(A, x)
24+
@kernel function fill_kernel(A, x)
2425
idx = @index(Global, Linear)
2526
A[idx] = x
2627
end
@@ -32,6 +33,11 @@ end
3233
return A, typeof(A)
3334
end
3435

36+
@kernel function copy_kernel(B, A)
37+
idx = @index(Global, Linear)
38+
B[idx] = A[idx]
39+
end
40+
3541
# Create a function to perform an in-place operation.
3642
function addarray!(x)
3743
x .= x .+ 1.0f0
@@ -53,6 +59,13 @@ end
5359
DA, T = fetch(Dagger.@spawn fill_thunk(A, 2.3f0))
5460
@test all(DA .== 2.3f0)
5561
@test T <: Array
62+
63+
A = rand(Float64, 128)
64+
B = zeros(Float64, 128)
65+
Dagger.with_options(scope=Dagger.scope(worker=1,thread=1)) do
66+
fetch(Dagger.@spawn Kernel(copy_kernel)(B, A; ndrange=length(A)))
67+
end
68+
@test all(B .== A)
5669
end
5770
end
5871

@@ -81,6 +94,13 @@ end
8194
end
8295
@test all(DA .== 2.3f0)
8396
@test T <: CuArray
97+
98+
A = CUDA.rand(128)
99+
B = CUDA.zeros(128)
100+
Dagger.with_options(;scope=Dagger.scope(worker=1,cuda_gpu=1)) do
101+
fetch(Dagger.@spawn Kernel(copy_kernel)(B, A; ndrange=length(A)))
102+
end
103+
@test all(B .== A)
84104
end
85105
end
86106
end
@@ -110,6 +130,13 @@ end
110130
end
111131
@test all(DA .== 2.3f0)
112132
@test T <: ROCArray
133+
134+
A = AMDGPU.rand(128)
135+
B = AMDGPU.zeros(128)
136+
Dagger.with_options(;scope=Dagger.scope(worker=1,rocm_gpu=1)) do
137+
fetch(Dagger.@spawn Kernel(copy_kernel)(B, A; ndrange=length(A)))
138+
end
139+
@test all(B .== A)
113140
end
114141
end
115142
end
@@ -139,6 +166,13 @@ end
139166
end
140167
@test all(DA .== 2.3f0)
141168
@test T <: MtlArray
169+
170+
A = Metal.rand(128)
171+
B = Metal.zeros(128)
172+
Dagger.with_options(;scope=Dagger.scope(worker=1,metal_gpu=1)) do
173+
fetch(Dagger.@spawn Kernel(copy_kernel)(B, A; ndrange=length(A)))
174+
end
175+
@test all(B .== A)
142176
end
143177

144178
@testset "In-place operations" begin

0 commit comments

Comments
 (0)