Skip to content

Commit 383ef67

Browse files
committed
Wrap oneMKL calls in try/catch and add syclQueueWait
Wrap all generated oneMKL C wrappers in try/catch blocks to propagate errors as return codes instead of crashing. LAPACK functions catch computation_error and return info(), while BLAS/sparse functions catch sycl::exception and return -1. Also add syclQueueWait to the SYCL interop layer.
1 parent 8b23860 commit 383ef67

5 files changed

Lines changed: 2126 additions & 1048 deletions

File tree

deps/generate_interfaces.jl

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -444,20 +444,48 @@ function generate_cpp(library::String, filename::Vector{String}, output::String;
444444
variant = "column_major::"
445445
end
446446

447+
# Build catch clause: LAPACK functions also catch computation_error for info
448+
lapack_catch = "catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }"
449+
sycl_catch = "catch (const sycl::exception& e) { return -1; }"
450+
447451
write(oneapi_cpp, "extern \"C\" $header {\n")
448452
if template
449453
type = version_types[version]
450-
!occursin("scratchpad_size", name) && write(oneapi_cpp, " auto status = oneapi::mkl::$library::$variant$name<$type>($parameters, {});\n device_queue->val.wait_and_throw();\n")
451-
occursin("scratchpad_size", name) && write(oneapi_cpp, " int64_t scratchpad_size = oneapi::mkl::$library::$variant$name<$type>($parameters);\n device_queue->val.wait_and_throw();\n")
452-
# !occursin("scratchpad_size", name) && write(oneapi_cpp, " auto status = oneapi::mkl::$library::$variant$name<$type>($parameters, {});\n")
453-
# occursin("scratchpad_size", name) && write(oneapi_cpp, " int64_t scratchpad_size = oneapi::mkl::$library::$variant$name<$type>($parameters);\n")
454+
if !occursin("scratchpad_size", name)
455+
catch_clause = library == "lapack" ? lapack_catch : sycl_catch
456+
write(oneapi_cpp, " try {\n")
457+
write(oneapi_cpp, " auto status = oneapi::mkl::$library::$variant$name<$type>($parameters, {});\n")
458+
write(oneapi_cpp, " device_queue->val.wait_and_throw();\n")
459+
write(oneapi_cpp, " } $catch_clause\n")
460+
end
461+
if occursin("scratchpad_size", name)
462+
write(oneapi_cpp, " int64_t scratchpad_size = oneapi::mkl::$library::$variant$name<$type>($parameters);\n device_queue->val.wait_and_throw();\n")
463+
end
454464
else
455465
if !(name void_output)
456-
write(oneapi_cpp, " auto status = oneapi::mkl::$library::$variant$name($parameters, {});\n")
457-
occursin("device_queue", parameters) && write(oneapi_cpp, " device_queue->val.wait_and_throw();\n")
466+
has_queue = occursin("device_queue", parameters)
467+
is_scratchpad = occursin("scratchpad_size", name)
468+
if has_queue && !is_scratchpad
469+
catch_clause = library == "lapack" ? lapack_catch : sycl_catch
470+
write(oneapi_cpp, " try {\n")
471+
write(oneapi_cpp, " auto status = oneapi::mkl::$library::$variant$name($parameters, {});\n")
472+
write(oneapi_cpp, " device_queue->val.wait_and_throw();\n")
473+
write(oneapi_cpp, " } $catch_clause\n")
474+
else
475+
write(oneapi_cpp, " auto status = oneapi::mkl::$library::$variant$name($parameters, {});\n")
476+
if has_queue
477+
write(oneapi_cpp, " device_queue->val.wait_and_throw();\n")
478+
end
479+
end
458480
else
459-
write(oneapi_cpp, " oneapi::mkl::$library::$variant$name($parameters);\n")
460-
occursin("device_queue", parameters) && write(oneapi_cpp, " device_queue->val.wait_and_throw();\n")
481+
if occursin("device_queue", parameters)
482+
write(oneapi_cpp, " try {\n")
483+
write(oneapi_cpp, " oneapi::mkl::$library::$variant$name($parameters);\n")
484+
write(oneapi_cpp, " device_queue->val.wait_and_throw();\n")
485+
write(oneapi_cpp, " } $sycl_catch\n")
486+
else
487+
write(oneapi_cpp, " oneapi::mkl::$library::$variant$name($parameters);\n")
488+
end
461489
end
462490
end
463491
if occursin("scratchpad_size", name)

0 commit comments

Comments
 (0)