Skip to content

Commit 1021932

Browse files
Reuse Rust dimension arrays
1 parent 9e3b755 commit 1021932

5 files changed

Lines changed: 38 additions & 44 deletions

File tree

oneapi-rs-sys/include/queue.hpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
namespace sycl_shims {
1717
struct EventPtr;
18+
struct Range1;
1819
struct Range2;
1920
struct Range3;
2021
} // namespace sycl_shims
@@ -32,14 +33,17 @@ std::unique_ptr<Event> barrier(std::unique_ptr<Queue> &, rust::Vec<EventPtr>);
3233
void wait(std::unique_ptr<Queue> &);
3334

3435
std::unique_ptr<Event>
35-
launch_1d(std::unique_ptr<Queue> &, unsigned long global_size, unsigned long local_size,
36-
Kernel const &, rust::Slice<rust::slice<std::uint8_t const> const> args);
36+
launch_1d(std::unique_ptr<Queue> &, Range1 global_size, Range1 local_size,
37+
Kernel const &,
38+
rust::Slice<rust::slice<std::uint8_t const> const> args);
3739

3840
std::unique_ptr<Event>
3941
launch_2d(std::unique_ptr<Queue> &, Range2 global_size, Range2 local_size,
40-
Kernel const &, rust::Slice<rust::slice<std::uint8_t const> const> args);
42+
Kernel const &,
43+
rust::Slice<rust::slice<std::uint8_t const> const> args);
4144

4245
std::unique_ptr<Event>
4346
launch_3d(std::unique_ptr<Queue> &, Range3 global_size, Range3 local_size,
44-
Kernel const &, rust::Slice<rust::slice<std::uint8_t const> const> args);
47+
Kernel const &,
48+
rust::Slice<rust::slice<std::uint8_t const> const> args);
4549
} // namespace sycl_shims::queue

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ pub mod ffi {
1212
extern "C++" {
1313
include!("oneapi-rs-sys/src/types-sys.rs.h");
1414
type EventPtr = crate::types::ffi::EventPtr;
15+
type Range1 = crate::types::ffi::Range1;
1516
type Range2 = crate::types::ffi::Range2;
1617
type Range3 = crate::types::ffi::Range3;
1718
}
@@ -49,8 +50,8 @@ pub mod ffi {
4950

5051
unsafe fn launch_1d(
5152
queue: &mut UniquePtr<Queue>,
52-
global_size: u64,
53-
local_size: u64,
53+
global_size: Range1,
54+
local_size: Range1,
5455
kernel: &Kernel,
5556
args: &[&[u8]],
5657
) -> UniquePtr<Event>;

oneapi-rs-sys/src/queue.cpp

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -69,30 +69,33 @@ launch(std::unique_ptr<Queue> &queue, sycl::nd_range<Dimensions> nd_range,
6969
}
7070

7171
std::unique_ptr<Event>
72-
launch_1d(std::unique_ptr<Queue> &queue, unsigned long global_size,
73-
unsigned long local_size, Kernel const &kernel,
72+
launch_1d(std::unique_ptr<Queue> &queue, Range1 global_size, Range1 local_size,
73+
Kernel const &kernel,
7474
rust::Slice<rust::slice<std::uint8_t const> const> args) {
75-
return launch(queue, sycl::nd_range<1>{{global_size}, {local_size}}, kernel,
76-
args);
75+
return launch(queue,
76+
sycl::nd_range<1>{{global_size.data[0]}, {local_size.data[0]}},
77+
kernel, args);
7778
}
7879

7980
std::unique_ptr<Event>
8081
launch_2d(std::unique_ptr<Queue> &queue, Range2 global_size, Range2 local_size,
8182
Kernel const &kernel,
8283
rust::Slice<rust::slice<std::uint8_t const> const> args) {
8384
return launch(queue,
84-
sycl::nd_range<2>{{global_size.x, global_size.y},
85-
{local_size.x, local_size.y}},
85+
sycl::nd_range<2>{{global_size.data[0], global_size.data[1]},
86+
{local_size.data[0], local_size.data[1]}},
8687
kernel, args);
8788
}
8889

8990
std::unique_ptr<Event>
9091
launch_3d(std::unique_ptr<Queue> &queue, Range3 global_size, Range3 local_size,
9192
Kernel const &kernel,
9293
rust::Slice<rust::slice<std::uint8_t const> const> args) {
93-
return launch(queue,
94-
sycl::nd_range<3>{{global_size.x, global_size.y, global_size.z},
95-
{local_size.x, local_size.y, local_size.z}},
96-
kernel, args);
94+
return launch(
95+
queue,
96+
sycl::nd_range<3>{
97+
{global_size.data[0], global_size.data[1], global_size.data[2]},
98+
{local_size.data[0], local_size.data[1], local_size.data[2]}},
99+
kernel, args);
97100
}
98101
} // namespace sycl_shims::queue

oneapi-rs-sys/src/types-sys.rs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -77,16 +77,18 @@ pub mod ffi {
7777
Complete,
7878
Unknown,
7979
}
80-
80+
81+
// cxx doesn't support const generic parameters
82+
struct Range1 {
83+
data: [u64; 1]
84+
}
85+
8186
struct Range2 {
82-
x: u64,
83-
y: u64,
87+
data: [u64; 2]
8488
}
8589

8690
struct Range3 {
87-
x: u64,
88-
y: u64,
89-
z: u64,
91+
data: [u64; 3]
9092
}
9193

9294
impl UniquePtr<Device> {}

oneapi-rs/src/kernel_bundle.rs

Lines changed: 6 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66
// SPDX-License-Identifier: MIT OR Apache-2.0
77
//
88

9-
use std::marker::PhantomData;
10-
119
use bytemuck::Pod;
1210
use oneapi_rs_sys::{kernel_bundle::ffi, types};
1311

@@ -89,8 +87,8 @@ impl ValidDimension for NdRange<1> {
8987
unsafe {
9088
oneapi_rs_sys::queue::ffi::launch_1d(
9189
&mut queue.0,
92-
self.group_size[0],
93-
self.local_size[0],
90+
types::ffi::Range1 { data: self.group_size },
91+
types::ffi::Range1 { data: self.local_size },
9492
&kernel.0,
9593
&args.as_raw_arg_list()
9694
)
@@ -103,14 +101,8 @@ impl ValidDimension for NdRange<2> {
103101
unsafe {
104102
oneapi_rs_sys::queue::ffi::launch_2d(
105103
&mut queue.0,
106-
types::ffi::Range2 {
107-
x: self.group_size[0],
108-
y: self.group_size[1],
109-
},
110-
types::ffi::Range2 {
111-
x: self.local_size[0],
112-
y: self.local_size[1],
113-
},
104+
types::ffi::Range2 { data: self.group_size },
105+
types::ffi::Range2 { data: self.local_size },
114106
&kernel.0,
115107
&args.as_raw_arg_list()
116108
)
@@ -123,16 +115,8 @@ impl ValidDimension for NdRange<3> {
123115
unsafe {
124116
oneapi_rs_sys::queue::ffi::launch_3d(
125117
&mut queue.0,
126-
types::ffi::Range3 {
127-
x: self.group_size[0],
128-
y: self.group_size[1],
129-
z: self.group_size[2],
130-
},
131-
types::ffi::Range3 {
132-
x: self.local_size[0],
133-
y: self.local_size[1],
134-
z: self.local_size[2],
135-
},
118+
types::ffi::Range3 { data: self.group_size },
119+
types::ffi::Range3 { data: self.local_size },
136120
&kernel.0,
137121
&args.as_raw_arg_list()
138122
)

0 commit comments

Comments
 (0)