From e12961b87fefed0f7fa35a50270d88d5bbd3f9b3 Mon Sep 17 00:00:00 2001 From: Christian Guinard <28689358+christiangnrd@users.noreply.github.com> Date: Fri, 7 Feb 2025 12:35:29 -0400 Subject: [PATCH] Use GPUToolbox --- Project.toml | 2 ++ lib/level-zero/event.jl | 2 +- lib/level-zero/fence.jl | 2 +- lib/level-zero/module.jl | 2 +- lib/utils/APIUtils.jl | 3 +- lib/utils/call.jl | 71 ---------------------------------------- 6 files changed, 7 insertions(+), 75 deletions(-) delete mode 100644 lib/utils/call.jl diff --git a/Project.toml b/Project.toml index 09e937dc..114c8c90 100644 --- a/Project.toml +++ b/Project.toml @@ -9,6 +9,7 @@ CEnum = "fa961155-64e5-5f13-b03f-caf6b980ea82" ExprTools = "e2ba6199-217a-4e67-a87a-7c52f15ade04" GPUArrays = "0c68f7d7-f131-5f86-a1c3-88cf8149b2d7" GPUCompiler = "61eb1bfa-7361-4325-ad38-22787b887f55" +GPUToolbox = "096a3bc2-3ced-46d0-87f4-dd12716f4bfc" KernelAbstractions = "63c18a36-062a-441e-b654-da1e3ab1ce7c" LLVM = "929cbde3-209d-540e-8aea-75f648917ca0" Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb" @@ -33,6 +34,7 @@ CEnum = "0.4, 0.5" ExprTools = "0.1" GPUArrays = "11.2.1" GPUCompiler = "0.23, 0.24, 0.25, 0.26, 0.27, 1" +GPUToolbox = "0.1" KernelAbstractions = "0.9.1" LLVM = "6, 7, 8, 9" NEO_jll = "=24.26.30049" diff --git a/lib/level-zero/event.jl b/lib/level-zero/event.jl index d10046ca..7257828e 100644 --- a/lib/level-zero/event.jl +++ b/lib/level-zero/event.jl @@ -65,7 +65,7 @@ Base.reset(event::ZeEvent) = zeEventHostReset(event) append_reset!(list::ZeCommandList, event::ZeEvent) = zeCommandListAppendEventReset(list, event) function Base.isdone(event::ZeEvent) - res = unsafe_zeEventQueryStatus(event) + res = unchecked_zeEventQueryStatus(event) if res == RESULT_NOT_READY return false elseif res == RESULT_SUCCESS diff --git a/lib/level-zero/fence.jl b/lib/level-zero/fence.jl index ec29aa2c..50860937 100644 --- a/lib/level-zero/fence.jl +++ b/lib/level-zero/fence.jl @@ -29,7 +29,7 @@ Base.wait(fence::ZeFence, timeout::Number=typemax(UInt64)) = Base.reset(fence::ZeFence) = zeFenceReset(fence) function Base.isdone(fence::ZeFence) - res = unsafe_zeFenceQueryStatus(fence) + res = unchecked_zeFenceQueryStatus(fence) if res == RESULT_NOT_READY return false elseif res == RESULT_SUCCESS diff --git a/lib/level-zero/module.jl b/lib/level-zero/module.jl index 2c0b7717..2af65b23 100644 --- a/lib/level-zero/module.jl +++ b/lib/level-zero/module.jl @@ -31,7 +31,7 @@ mutable struct ZeModule pConstants=Base.unsafe_convert(Ptr{ze_module_constants_t}, constants) )) handle_ref = Ref{ze_module_handle_t}() - res = unsafe_zeModuleCreate(ctx, dev, desc_ref, handle_ref, log_ref) + res = unchecked_zeModuleCreate(ctx, dev, desc_ref, handle_ref, log_ref) end # read the log diff --git a/lib/utils/APIUtils.jl b/lib/utils/APIUtils.jl index 5d79caae..d8d30394 100644 --- a/lib/utils/APIUtils.jl +++ b/lib/utils/APIUtils.jl @@ -1,7 +1,8 @@ module APIUtils # helpers that facilitate working with C APIs -include("call.jl") +using GPUToolbox: @checked, @debug_ccall +export @checked, @debug_ccall include("enum.jl") end diff --git a/lib/utils/call.jl b/lib/utils/call.jl deleted file mode 100644 index a2ef166d..00000000 --- a/lib/utils/call.jl +++ /dev/null @@ -1,71 +0,0 @@ -export @checked, @debug_ccall - -""" - @checked function foo(...) - rv = ... - return rv - end - -Macro for wrapping a function definition returning a status code. Two versions of the -function will be generated: `foo`, with the function body wrapped by an invocation of the -`check` function (to be implemented by the caller of this macro), and `unsafe_foo` where no -such invocation is present and the status code is returned to the caller. -""" -macro checked(ex) - # parse the function definition - @assert Meta.isexpr(ex, :function) - sig = ex.args[1] - @assert Meta.isexpr(sig, :call) - body = ex.args[2] - @assert Meta.isexpr(body, :block) - - # generate a "safe" version that performs a check - safe_body = quote - check() do - $body - end - end - safe_sig = Expr(:call, sig.args[1], sig.args[2:end]...) - safe_def = Expr(:function, safe_sig, safe_body) - - # generate a "unsafe" version that returns the error code instead - unsafe_sig = Expr(:call, Symbol("unsafe_", sig.args[1]), sig.args[2:end]...) - unsafe_def = Expr(:function, unsafe_sig, body) - - return esc(:($safe_def, $unsafe_def)) -end - -macro debug_ccall(ex) - @assert Meta.isexpr(ex, :(::)) - call, ret = ex.args - @assert Meta.isexpr(call, :call) - target, argexprs... = call.args - args = map(argexprs) do argexpr - @assert Meta.isexpr(argexpr, :(::)) - argexpr.args[1] - end - - ex = Expr(:macrocall, Symbol("@ccall"), __source__, ex) - - quote - print($(string(target)), '(') - for (i, arg) in enumerate(($(map(esc, args)...),)) - i > 1 && print(", ") - render_arg(stdout, arg) - end - print(')') - - rv = $(esc(ex)) - - println(" = ", rv) - for (i, arg) in enumerate(($(map(esc, args)...),)) - if arg isa Base.RefValue - println(" $i: ", arg[]) - end - end - rv - end -end - -render_arg(io, arg) = print(io, arg) -render_arg(io, arg::Union{<:Base.RefValue, AbstractArray}) = summary(io, arg)