Skip to content

Commit a0b4c75

Browse files
committed
Use opaque pointer to std::vector directly
Switch approach to not introduce an intermediate struct, but have the opaque pointer directly point to std::vector instead.
1 parent 775d7c8 commit a0b4c75

7 files changed

+18
-36
lines changed

dpctl/_backend.pxd

-3
Original file line numberDiff line numberDiff line change
@@ -573,9 +573,6 @@ cdef extern from "syclinterface/dpctl_sycl_extension_interface.h":
573573

574574
cdef bint DPCTLWorkGroupMemory_Available()
575575

576-
cdef struct RawKernelArgDataTy
577-
ctypedef RawKernelArgDataTy RawKernelArgData
578-
579576
cdef struct DPCTLOpaqueRawKernelArg
580577
ctypedef DPCTLOpaqueRawKernelArg *DPCTLSyclRawKernelArgRef;
581578

dpctl/sycl.pxd

+4-6
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,6 @@ cdef extern from "sycl/sycl.hpp" namespace "sycl":
4545
cdef extern from "syclinterface/dpctl_sycl_extension_interface.h":
4646
cdef struct RawWorkGroupMemoryTy
4747
ctypedef RawWorkGroupMemoryTy RawWorkGroupMemory
48-
cdef struct RawKernelArgDataTy
49-
ctypedef RawKernelArgDataTy RawKernelArgData
5048

5149
cdef extern from "syclinterface/dpctl_sycl_type_casters.hpp" \
5250
namespace "dpctl::syclinterface":
@@ -90,9 +88,9 @@ cdef extern from "syclinterface/dpctl_sycl_type_casters.hpp" \
9088

9189
# raw kernel arg extension
9290
cdef dpctl_backend.DPCTLSyclRawKernelArgRef wrap_raw_kernel_arg \
93-
"dpctl::syclinterface::wrap<RawKernelArgData>" \
94-
(const RawKernelArgData *)
91+
"dpctl::syclinterface::wrap<std::vector<unsigned char>>" \
92+
(const std::vector<unsigned char> *)
9593

96-
cdef RawKernelArgData * unwrap_raw_kernel_arg \
97-
"dpctl::syclinterface::unwrap<RawKernelArgData>" (
94+
cdef std::vector<unsigned char> * unwrap_raw_kernel_arg \
95+
"dpctl::syclinterface::unwrap<std::vector<unsigned char>>" (
9896
dpctl_backend.DPCTLSyclRawKernelArgRef)

libsyclinterface/include/syclinterface/dpctl_sycl_extension_interface.h

-18
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,6 @@
3434
#include "dpctl_sycl_enum_types.h"
3535
#include "dpctl_sycl_types.h"
3636

37-
#include <cstring>
38-
#include <vector>
39-
4037
DPCTL_C_EXTERN_C_BEGIN
4138

4239
typedef struct RawWorkGroupMemoryTy
@@ -56,21 +53,6 @@ void DPCTLWorkGroupMemory_Delete(__dpctl_take DPCTLSyclWorkGroupMemoryRef Ref);
5653
DPCTL_API
5754
bool DPCTLWorkGroupMemory_Available();
5855

59-
typedef class RawKernelArgDataTy
60-
{
61-
public:
62-
RawKernelArgDataTy(void *bytes, size_t count) : data(count)
63-
{
64-
std::memcpy(data.data(), bytes, count);
65-
}
66-
67-
void *bytes() { return data.data(); }
68-
size_t count() { return data.size(); }
69-
70-
private:
71-
std::vector<unsigned char> data;
72-
} RawKernelArgData;
73-
7456
typedef struct DPCTLOpaqueSyclRawKernelArg *DPCTLSyclRawKernelArgRef;
7557

7658
DPCTL_API

libsyclinterface/include/syclinterface/dpctl_sycl_type_casters.hpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,8 @@ DEFINE_SIMPLE_CONVERSION_FUNCTIONS(std::vector<DPCTLSyclEventRef>,
8484
DEFINE_SIMPLE_CONVERSION_FUNCTIONS(RawWorkGroupMemory,
8585
DPCTLSyclWorkGroupMemoryRef)
8686

87-
DEFINE_SIMPLE_CONVERSION_FUNCTIONS(RawKernelArgData, DPCTLSyclRawKernelArgRef)
87+
DEFINE_SIMPLE_CONVERSION_FUNCTIONS(std::vector<unsigned char>,
88+
DPCTLSyclRawKernelArgRef)
8889

8990
#endif
9091

libsyclinterface/source/dpctl_sycl_extension_interface.cpp

+7-4
Original file line numberDiff line numberDiff line change
@@ -63,15 +63,18 @@ bool DPCTLWorkGroupMemory_Available()
6363
#endif
6464
}
6565

66+
using raw_kernel_arg_t = std::vector<unsigned char>;
67+
6668
DPCTL_API
6769
__dpctl_give DPCTLSyclRawKernelArgRef DPCTLRawKernelArg_Create(void *bytes,
6870
size_t count)
6971
{
7072
DPCTLSyclRawKernelArgRef rka = nullptr;
7173
try {
72-
auto RawKernelArg = std::unique_ptr<RawKernelArgData>(
73-
new RawKernelArgData(bytes, count));
74-
rka = wrap<RawKernelArgData>(RawKernelArg.get());
74+
auto RawKernelArg =
75+
std::unique_ptr<raw_kernel_arg_t>(new raw_kernel_arg_t(count));
76+
std::memcpy(RawKernelArg->data(), bytes, count);
77+
rka = wrap<raw_kernel_arg_t>(RawKernelArg.get());
7578
RawKernelArg.release();
7679
} catch (std::exception const &e) {
7780
error_handler(e, __FILE__, __func__, __LINE__);
@@ -82,7 +85,7 @@ __dpctl_give DPCTLSyclRawKernelArgRef DPCTLRawKernelArg_Create(void *bytes,
8285
DPCTL_API
8386
void DPCTLRawKernelArg_Delete(__dpctl_take DPCTLSyclRawKernelArgRef Ref)
8487
{
85-
delete unwrap<RawKernelArgData>(Ref);
88+
delete unwrap<raw_kernel_arg_t>(Ref);
8689
}
8790

8891
DPCTL_API

libsyclinterface/source/dpctl_sycl_queue_interface.cpp

+4-3
Original file line numberDiff line numberDiff line change
@@ -237,9 +237,10 @@ bool set_kernel_arg(handler &cgh,
237237
case DPCTL_RAW_KERNEL_ARG:
238238
{
239239
auto ref = static_cast<DPCTLSyclRawKernelArgRef>(Arg);
240-
RawKernelArgData *raw_arg = unwrap<RawKernelArgData>(ref);
241-
void *bytes = raw_arg->bytes();
242-
size_t count = raw_arg->count();
240+
std::vector<unsigned char> *raw_arg =
241+
unwrap<std::vector<unsigned char>>(ref);
242+
void *bytes = raw_arg->data();
243+
size_t count = raw_arg->size();
243244
sycl::ext::oneapi::experimental::raw_kernel_arg arg{bytes, count};
244245
cgh.set_arg(idx, arg);
245246
break;

libsyclinterface/tests/test_sycl_queue_submit_raw_kernel_arg.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ void submit_kernel(DPCTLSyclQueueRef QRef,
9393
Params<T> p{T{4}, T{5}};
9494
auto rka = DPCTLRawKernelArg_Create(&p, sizeof(Params<T>));
9595
ASSERT_TRUE(rka != nullptr);
96-
auto *rka_raw = unwrap<RawKernelArgData>(rka);
96+
auto *rka_raw = unwrap<std::vector<unsigned char>>(rka);
9797
ASSERT_TRUE(rka_raw != nullptr);
9898
void *args_1d[NARGS] = {unwrap<void>(a), rka};
9999
DPCTLKernelArgType addKernelArgTypes[] = {DPCTL_VOID_PTR,

0 commit comments

Comments
 (0)