Skip to content

Commit a91948f

Browse files
committed
add Event(f, args; dependencies)
1 parent 11f3970 commit a91948f

File tree

3 files changed

+34
-0
lines changed

3 files changed

+34
-0
lines changed

src/backends/cpu.jl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,14 @@ function Event(::CPU)
66
return NoneEvent()
77
end
88

9+
function Event(f, args...; dependencies=nothing, progress=nothing)
10+
T = Threads.@spawn begin
11+
wait(MultiEvent(dependencies), progress)
12+
f(args...)
13+
end
14+
return CPUEvent(T)
15+
end
16+
917
wait(ev::Union{CPUEvent, NoneEvent, MultiEvent}, progress=nothing) = wait(CPU(), ev, progress)
1018
wait(::CPU, ev::NoneEvent, progress=nothing) = nothing
1119

test/events.jl

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using KernelAbstractions
2+
using Test
3+
4+
@testset "Error propagation" begin
5+
let event = Event(()->error(""))
6+
@test_throws TaskFailedException wait(event)
7+
end
8+
9+
let event = Event(error, "")
10+
@test_throws CompositeException wait(MultiEvent(event))
11+
end
12+
13+
let event = Event(error, "")
14+
event = Event(wait, MultiEvent(event))
15+
@test_throws TaskFailedException wait(event)
16+
end
17+
18+
let event = Event(error, "")
19+
event = Event(()->nothing, dependencies=event)
20+
@test_throws TaskFailedException wait(event)
21+
end
22+
end

test/runtests.jl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ end
2121
include("nditeration.jl")
2222
end
2323

24+
@testset "Events" begin
25+
include("events.jl")
26+
end
27+
2428
include("print_test.jl")
2529

2630
include("examples.jl")

0 commit comments

Comments
 (0)