Skip to content

Commit dfebe00

Browse files
Add basic C++ nd_launch implementation
1 parent 8259982 commit dfebe00

3 files changed

Lines changed: 13 additions & 0 deletions

File tree

oneapi-rs-sys/include/queue.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,5 @@ std::unique_ptr<Event> memset(std::unique_ptr<Queue> &, std::uint8_t *ptr,
2828
rust::Vec<EventPtr>);
2929
std::unique_ptr<Event> barrier(std::unique_ptr<Queue> &, rust::Vec<EventPtr>);
3030
void wait(std::unique_ptr<Queue> &);
31+
std::unique_ptr<Event> launch(std::unique_ptr<Queue> &, Kernel const &, rust::Slice<rust::slice<std::uint8_t const> const> args);
3132
} // namespace sycl_shims::queue

oneapi-rs-sys/src/queue-sys.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,5 +42,6 @@ pub mod ffi {
4242
) -> UniquePtr<Event>;
4343
fn barrier(queue: &mut UniquePtr<Queue>, dep_events: Vec<EventPtr>) -> UniquePtr<Event>;
4444
fn wait(queue: &mut UniquePtr<Queue>);
45+
unsafe fn launch(queue: &mut UniquePtr<Queue>, kernel: &Kernel, args: &[&[u8]]) -> UniquePtr<Event>;
4546
}
4647
}

oneapi-rs-sys/src/queue.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
using sycl::ext::intel::property::queue::immediate_command_list;
1313
using sycl::property::queue::in_order;
1414

15+
namespace syclexp = sycl::ext::oneapi::experimental;
16+
1517
namespace sycl_shims::queue {
1618
std::unique_ptr<Queue> new_queue() {
1719
return std::make_unique<Queue>(sycl::queue({in_order()}));
@@ -52,4 +54,13 @@ std::unique_ptr<Event> barrier(std::unique_ptr<Queue> &queue,
5254
}
5355

5456
void wait(std::unique_ptr<Queue> &queue) { queue->wait(); }
57+
58+
std::unique_ptr<Event> launch(std::unique_ptr<Queue> queue, Kernel const &kernel, rust::Slice<rust::slice<std::uint8_t const> const> args) {
59+
return std::make_unique<Event>(queue->submit([&](sycl::handler &cgh) {
60+
for (std::size_t i = 0; i < args.size(); ++i)
61+
cgh.set_arg(i, syclexp::raw_kernel_arg(args[i].data(), args[i].size()));
62+
63+
cgh.parallel_for(sycl::nd_range{{1024}, {16}}, kernel);
64+
}));
65+
}
5566
} // namespace sycl_shims::queue

0 commit comments

Comments
 (0)