Skip to content

Commit 25211c4

Browse files
[SYCL] Fix DeviceCodeSplit checks to eliminate KernelInfo usage (#9316)
SYCL implementation does not properly support KernelInfo usage in multiple translation units. In this test integration header with File1Kern1 is included to main source file where we execute that kernel. In the second file get_kernel_id is used for checks but integration header is not attached to that file since we do not execute kernel there and we got UB because trying to use get_name() function of KI. This problem is a known one. This test doesn't target to verify this behavior - it is targeted to verify that kernels from different files are added to different device images if we built it with related option. A different check is implemented that does not involve UB case and enables initially disabled checks because of the problem above. Signed-off-by: Tikhomirova, Kseniya <[email protected]>
1 parent d5494f9 commit 25211c4

File tree

2 files changed

+25
-27
lines changed

2 files changed

+25
-27
lines changed

sycl/test-e2e/DeviceCodeSplit/Inputs/split-per-source-second-file.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,13 @@ void runKernelsFromFile2() {
66
{
77
sycl::buffer<int, 1> Buf(&Data, sycl::range<1>(1));
88
auto KernelID1 = sycl::get_kernel_id<File2Kern1>();
9-
auto KernelID2 = sycl::get_kernel_id<File1Kern1>();
10-
auto KernelID3 = sycl::get_kernel_id<File1Kern2>();
119
auto KB = sycl::get_kernel_bundle<sycl::bundle_state::executable>(
1210
Q.get_context(), {KernelID1});
1311
auto Krn = KB.get_kernel(KernelID1);
1412

15-
assert(!KB.has_kernel(KernelID2));
16-
assert(!KB.has_kernel(KernelID3));
13+
std::vector<sycl::kernel_id> KernelIDStorage = KB.get_kernel_ids();
14+
assert(KernelIDStorage.size() == 1);
15+
assert(KernelIDStorage[0] == KernelID1);
1716

1817
Q.submit([&](sycl::handler &Cgh) {
1918
auto Acc = Buf.get_access<sycl::access::mode::read_write>(Cgh);

sycl/test-e2e/DeviceCodeSplit/split-per-source-main.cpp

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -11,41 +11,40 @@
1111
int main() {
1212
sycl::queue Q;
1313
int Data = 0;
14-
{
15-
sycl::buffer<int, 1> Buf(&Data, sycl::range<1>(1));
16-
auto KernelID = sycl::get_kernel_id<File1Kern1>();
17-
auto KB = sycl::get_kernel_bundle<sycl::bundle_state::executable>(
18-
Q.get_context(), {KernelID});
19-
auto Krn = KB.get_kernel(KernelID);
2014

21-
assert(KB.has_kernel(KernelID));
22-
// TODO uncomment once the KernelInfo in multiple translation units
23-
// bug is fixed.
24-
// assert(!Prg.has_kernel<File2Kern1>());
15+
auto KernelID = sycl::get_kernel_id<File1Kern1>();
16+
auto KB = sycl::get_kernel_bundle<sycl::bundle_state::executable>(
17+
Q.get_context(), {KernelID});
18+
assert(KB.has_kernel(KernelID));
19+
auto Krn1 = KB.get_kernel(KernelID);
20+
21+
auto KernelID2 = sycl::get_kernel_id<File1Kern2>();
22+
assert(KB.has_kernel(KernelID2));
23+
auto Krn2 = KB.get_kernel(KernelID2);
24+
25+
std::vector<sycl::kernel_id> KernelIDStorage = KB.get_kernel_ids();
26+
assert(KernelIDStorage.size() == 2);
27+
assert(std::any_of(
28+
KernelIDStorage.begin(), KernelIDStorage.end(),
29+
[&KernelID](const sycl::kernel_id &id) { return id == KernelID; }));
30+
assert(std::any_of(
31+
KernelIDStorage.begin(), KernelIDStorage.end(),
32+
[&KernelID2](const sycl::kernel_id &id) { return id == KernelID2; }));
2533

34+
{
35+
sycl::buffer<int, 1> Buf(&Data, sycl::range<1>(1));
2636
Q.submit([&](sycl::handler &Cgh) {
2737
auto Acc = Buf.get_access<sycl::access::mode::read_write>(Cgh);
28-
Cgh.single_task<File1Kern1>(/*Krn,*/ [=]() { Acc[0] = 1; });
38+
Cgh.single_task<File1Kern1>(Krn1, [=]() { Acc[0] = 1; });
2939
});
3040
}
3141
assert(Data == 1);
3242

3343
{
3444
sycl::buffer<int, 1> Buf(&Data, sycl::range<1>(1));
35-
auto KernelID1 = sycl::get_kernel_id<File1Kern1>();
36-
auto KernelID2 = sycl::get_kernel_id<File1Kern2>();
37-
auto KB = sycl::get_kernel_bundle<sycl::bundle_state::executable>(
38-
Q.get_context(), {KernelID1});
39-
auto Krn = KB.get_kernel(KernelID2);
40-
41-
assert(KB.has_kernel(KernelID1));
42-
// TODO uncomment once the KernelInfo in multiple translation units
43-
// bug is fixed.
44-
// assert(!Prg.has_kernel<File2Kern1>());
45-
4645
Q.submit([&](sycl::handler &Cgh) {
4746
auto Acc = Buf.get_access<sycl::access::mode::read_write>(Cgh);
48-
Cgh.single_task<File1Kern2>(/*Krn,*/ [=]() { Acc[0] = 2; });
47+
Cgh.single_task<File1Kern2>(Krn2, [=]() { Acc[0] = 2; });
4948
});
5049
}
5150
assert(Data == 2);

0 commit comments

Comments
 (0)