- Notifications
You must be signed in to change notification settings - Fork3
reble/llvm
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
This fork is mostly stale since the main development has been moved to theIntel staging area for llvm.org contributions.
This fork has been the collaboration space for the oneAPI vendor Command Graph extension for SYCL2020 until September 2023.SYCL Graph provides an API for defining a graph of operations and their dependencies once and submitting this graph repeatedly for execution.
A draft of our Command Graph extension proposal can be found here:sycl_ext_oneapi_graph.
Our implementation can be found here:https://github.com/intel/llvm.
An application can query the SYCL library for the level of support itprovides for using the extension with a device by usingext::oneapi::experimental::info::device::graph_support
, which returns one of:
- Native - Backend command-buffer construct is used to implement graphs.
- Emulated - Graphs support is emulated by reissuing commands to the backend.
- Unsupported - Extension is not supported on the device.
Currently the Level Zero backend is the only supported SYCL backend for thesycl_ext_oneapi_graph
extension. As the focus of the current prototype is goodLevel Zero support to prove the value of the extension, rather than emulatedsupport for many backends. However, broadening the number of backends supportedis something we are interested in expanding on.
Backend | Implementation Support |
---|---|
Level Zero | Native using command-lists |
CUDA | Native support is a work-in-progress |
OpenCL | Unsupported |
HIP | Unsupported |
Others | Unsupported |
Feature | Implementation Status (- error type) |
---|---|
Adding a command-group node withcommand_graph::add() | Implemented |
Begin & end queue recording to a graph to create nodes | Implemented |
Edges created from buffer accessor dependencies | Implemented |
Edges created fromhandler::depends_on dependencies | Implemented |
Edges created usingmake_edge() | Implemented |
Edges created by passing a property list tocommand_graph::add() | Implemented |
Empty node | Implemented |
Queueext_oneapi_get_state() query | Implemented |
Vendor test macro | Implemented |
Ability to add a graph as a node of another graph (Sub-graphs) | Implemented |
Using all capabilities of USM in a graph node | Implemented |
Extending lifetime of buffers used in a graph, as defined by the "Storage Lifetimes" specification section | Not implemented - Throws an exception that feature is not supported yet |
Buffer taking a copy of underlying host data when buffer is used in a graph, as defined by the "Storage Lifetimes" specification section | Not implemented - Throws an exception that feature is not supported yet |
Executable graphupdate() | Not implemented - Exception "Method not yet implemented" |
Recording an in-order queue preserves linear dependencies | Implemented |
Usinghandler::parallel_for in a graph node | Implemented |
Usinghandler::single_task in a graph node | Implemented |
Usinghandler::memcpy in a graph node | Implemented |
Usinghandler::copy in a graph node | Implemented |
Usinghandler::host_task in a graph node | Not implemented - Assert: "getCGCopy() const: Assertion `false' failed." |
Usinghandler::fill in a graph node | Implemented for USM, not implemented for buffer accessors - Exception: "CG type not implemented for command buffers" |
Usinghandler::memset in a graph node | Not implemented - Exception: "CG type not implemented for command buffers" |
Usinghandler::prefetch in a graph node | Not implemented - Exception: "CG type not implemented for command buffers" |
Usinghandler::memadvise in a graph node | Not implemented - Exception: "CG type not implemented for command buffers" |
Using specialization constants in a graph node | Not implemented - Throws an exception that feature is not supported yet |
Using reductions in a graph node | Not implemented - Throws an exception that feature is not supported yet |
Using kernel bundles in a graph node | Not implemented - Throws an exception that feature is not supported yet |
Using sycl streams in a graph node | Not implemented - Exception: "Failed to add kernel to PI command-buffer" |
Thread safety of new methods | Implemented |
Profiling an event returned from graph submission withevent::get_profiling_info() | Not implemented - Throws an exception that feature is not supported yet |
Querying the state of an event returned from graph submission withevent::get_info<info::event::command_execution_status>() | Implemented |
This extension was presented at the oneAPI Technical Advisory board (Sept'22 meeting). Slides:https://github.com/oneapi-src/oneAPI-tab/blob/main/language/presentations/2022-09-28-TAB-SYCL-Graph.pdf.
Extension was presented at IWOCL 2023, and thetalk can be found on Youtube.
We target a contribution through the origin of this fork:Intel staging area for llvm.org contributions.
TDB
Submit anissue or initiate adiscussion.
This project welcomes contributions from the community. Please refer toCONTRIBUTINGfor general guidelines around contributing to this project. You can then seeContributeToDPCPP for DPC++ specificguidelines.
SeeLICENSE for details.
*Other names and brands may be claimed as the property of others.
About
Intel staging area for llvm.org contribution. Home for Intel LLVM-based projects.