Skip to content

Commit 2896ef7

Browse files
committed
only define constructors once
1 parent d85578f commit 2896ef7

File tree

2 files changed

+18
-8
lines changed

2 files changed

+18
-8
lines changed

src/macros.jl

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,16 @@ function __kernel(expr)
3838

3939
# create constructor functions
4040
constructors = quote
41-
$name(dev::$Device) = $name(dev, $DynamicSize(), $DynamicSize())
42-
$name(dev::$Device, size) = $name(dev, $StaticSize(size), $DynamicSize())
43-
$name(dev::$Device, size, range) = $name(dev, $StaticSize(size), $StaticSize(range))
44-
function $name(::Device, ::S, ::NDRange) where {Device<:$CPU, S<:$_Size, NDRange<:$_Size}
45-
return $Kernel{Device, S, NDRange, typeof($cpu_name)}($cpu_name)
46-
end
47-
function $name(::Device, ::S, ::NDRange) where {Device<:$GPU, S<:$_Size, NDRange<:$_Size}
48-
return $Kernel{Device, S, NDRange, typeof($gpu_name)}($gpu_name)
41+
if !@isdefined($name)
42+
$name(dev::$Device) = $name(dev, $DynamicSize(), $DynamicSize())
43+
$name(dev::$Device, size) = $name(dev, $StaticSize(size), $DynamicSize())
44+
$name(dev::$Device, size, range) = $name(dev, $StaticSize(size), $StaticSize(range))
45+
function $name(::Device, ::S, ::NDRange) where {Device<:$CPU, S<:$_Size, NDRange<:$_Size}
46+
return $Kernel{Device, S, NDRange, typeof($cpu_name)}($cpu_name)
47+
end
48+
function $name(::Device, ::S, ::NDRange) where {Device<:$GPU, S<:$_Size, NDRange<:$_Size}
49+
return $Kernel{Device, S, NDRange, typeof($gpu_name)}($gpu_name)
50+
end
4951
end
5052
end
5153

test/unroll.jl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,17 @@ using KernelAbstractions.Extras
77
end
88
end
99

10+
@kernel function kernel_unroll!(a, ::Val{N}) where N
11+
@unroll for i in 1:N
12+
@inbounds a[i] = i
13+
end
14+
end
15+
1016
let
1117
a = zeros(5)
1218
kernel! = kernel_unroll!(CPU(), 1, 1)
1319
event = kernel!(a)
1420
wait(event)
21+
event = kernel!(a, Val(5))
22+
wait(event)
1523
end

0 commit comments

Comments
 (0)