Skip to content

Commit 8a5133f

Browse files
authored
[SYCL][Graph] E2E test for nullptr dynamic parameter update (#15984)
Test for updating a dynamic parameter with a nullptr USM parameter.
1 parent 0fcc58e commit 8a5133f

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
// RUN: %{build} -o %t.out
2+
// RUN: %{run} %t.out
3+
// Extra run to check for leaks in Level Zero using UR_L0_LEAKS_DEBUG
4+
// RUN: %if level_zero %{env SYCL_PI_LEVEL_ZERO_USE_IMMEDIATE_COMMANDLISTS=0 %{l0_leak_check} %{run} %t.out 2>&1 | FileCheck %s --implicit-check-not=LEAK %}
5+
// Extra run to check for immediate-command-list in Level Zero
6+
// RUN: %if level_zero %{env SYCL_PI_LEVEL_ZERO_USE_IMMEDIATE_COMMANDLISTS=1 %{l0_leak_check} %{run} %t.out 2>&1 | FileCheck %s --implicit-check-not=LEAK %}
7+
8+
// Tests updating a graph node using a USM pointer set to nullptr
9+
10+
#include "../graph_common.hpp"
11+
12+
int main() {
13+
queue Queue{};
14+
15+
const size_t N = 1024;
16+
17+
exp_ext::command_graph Graph{Queue.get_context(), Queue.get_device()};
18+
19+
int *PtrOut = malloc_device<int>(N, Queue);
20+
int *PtrIn = malloc_device<int>(N, Queue);
21+
22+
Queue.memset(PtrOut, 0, N * sizeof(int)).wait();
23+
int PtrPattern = 42;
24+
Queue.fill(PtrIn, PtrPattern, N).wait();
25+
26+
exp_ext::dynamic_parameter InputParam(Graph, PtrIn);
27+
int DefaultPattern = 10;
28+
auto KernelNode = Graph.add([&](handler &cgh) {
29+
cgh.set_arg(0, InputParam);
30+
cgh.set_arg(1, PtrOut);
31+
cgh.single_task([=]() {
32+
for (size_t i = 0; i < N; i++) {
33+
if (PtrIn) {
34+
PtrOut[i] = PtrIn[i];
35+
} else {
36+
PtrOut[i] = DefaultPattern;
37+
}
38+
}
39+
});
40+
});
41+
42+
auto ExecGraph = Graph.finalize(exp_ext::property::graph::updatable{});
43+
44+
// PtrA should be filled with values
45+
Queue.ext_oneapi_graph(ExecGraph).wait();
46+
47+
std::vector<int> HostData(N);
48+
Queue.copy(PtrOut, HostData.data(), N).wait();
49+
for (size_t i = 0; i < N; i++) {
50+
assert(HostData[i] == PtrPattern);
51+
}
52+
53+
// Swap Input to nullptr
54+
int *NullPtr = nullptr;
55+
InputParam.update(NullPtr);
56+
ExecGraph.update(KernelNode);
57+
Queue.ext_oneapi_graph(ExecGraph).wait();
58+
59+
Queue.copy(PtrOut, HostData.data(), N).wait();
60+
for (size_t i = 0; i < N; i++) {
61+
assert(HostData[i] == DefaultPattern);
62+
}
63+
64+
free(PtrIn, Queue);
65+
free(PtrOut, Queue);
66+
return 0;
67+
}

0 commit comments

Comments
 (0)