1
1
// REQUIRES: level_zero, level_zero_dev_kit
2
2
// RUN: %clangxx -fsycl -fsycl-targets=%sycl_triple %level_zero_options %s -o %t.out
3
- // RUN: env SYCL_DEVICE_FILTER=level_zero ZE_DEBUG=1 %GPU_RUN_PLACEHOLDER %t.out 2>&1
3
+ // RUN: env SYCL_DEVICE_FILTER=level_zero ZE_DEBUG=1 %GPU_RUN_PLACEHOLDER %t.out 2>&1 | FileCheck %s
4
4
5
5
// Test for Level Zero buffer interop API.
6
6
// Check the following cases:
7
- // 1. Copy back is performed to the user-provided memory of interop buffer if
7
+ // 1. User-provided memory allocation is not freed by DPCPP RT if
8
8
// "keep" ownership is specified.
9
- // 2. If host access was performed in between two kernels then only one
10
- // host->device copy is performed.
11
- // 3. Check that copy back is not performed "transfer" ownership is specified.
9
+ // 2. User-provided memory allocation is freed by DPCPP RT if
10
+ // "transfer" ownership is specified.
11
+
12
+ // Keep ownership
13
+ // CHECK: zeMemFree
14
+
15
+ // Transfer ownership
16
+ // CHECK: zeMemFree
17
+ // CHECK: zeMemFree
18
+
19
+ // No other calls to zeMemFree
20
+ // CHECK-NOT: zeMemFree
12
21
13
22
#include " interop-level-zero-buffer-helpers.hpp"
14
23
#include < CL/sycl.hpp>
@@ -21,9 +30,9 @@ using namespace cl::sycl;
21
30
22
31
// Test copy back depending on provided ownership and check that memory is freed
23
32
// properly.
24
- void test_copyback_and_free (queue &Queue1, queue &Queue2,
25
- const ext::oneapi::level_zero::ownership &Ownership ,
26
- bool AccessOnHostBeforeCopyBack ) {
33
+ void test_copyback_and_free (
34
+ queue &Queue1, queue &Queue2 ,
35
+ const ext::oneapi::level_zero::ownership &Ownership ) {
27
36
try {
28
37
auto Context = Queue1.get_context ();
29
38
auto Device = Queue1.get_info <info::queue::device>();
@@ -82,20 +91,6 @@ void test_copyback_and_free(queue &Queue1, queue &Queue2,
82
91
});
83
92
84
93
Queue2.wait ();
85
- if (AccessOnHostBeforeCopyBack) {
86
- auto HostAcc = BufferInterop.get_host_access ();
87
- for (int i = 0 ; i < 12 ; i++) {
88
- assert (HostAcc[i] == 198 );
89
- }
90
- }
91
- }
92
- {
93
- int *NativeBufferInt = (int *)NativeBuffer;
94
-
95
- for (int i = 0 ; i < 12 ; i++) {
96
- if (Ownership == ext::oneapi::level_zero::ownership::keep)
97
- assert (NativeBufferInt[i] == 198 );
98
- }
99
94
}
100
95
if (Ownership == ext::oneapi::level_zero::ownership::keep)
101
96
zeMemFree (ZeContext, NativeBuffer);
@@ -124,25 +119,15 @@ int main() {
124
119
context Context2{Dev2};
125
120
queue Queue2{Context2, Dev2};
126
121
127
- std::cout << " Test case #1: Keep ownership, no host access before copy back"
128
- << std::endl;
122
+ std::cout << " Test case #1: Keep ownership" << std::endl;
129
123
test_copyback_and_free (Queue1, Queue2,
130
- ext::oneapi::level_zero::ownership::keep,
131
- /* AccessOnHostBeforeCopyBack*/ false );
124
+ ext::oneapi::level_zero::ownership::keep);
132
125
133
- std::cout
134
- << " Test case #2: Transfer ownership, no host access before copy back"
135
- << std::endl;
126
+ std::cout << " Test case #2: Transfer ownership" << std::endl;
136
127
test_copyback_and_free (Queue1, Queue2,
137
- ext::oneapi::level_zero::ownership::transfer,
138
- /* AccessOnHostBeforeCopyBack*/ false );
128
+ ext::oneapi::level_zero::ownership::transfer);
139
129
140
- std::cout << " Test case #3: Keep ownership, host access before copy back"
141
- << std::endl;
142
- test_copyback_and_free (Queue1, Queue2,
143
- ext::oneapi::level_zero::ownership::keep,
144
- /* AccessOnHostBeforeCopyBack*/ true );
145
- } catch (sycl::exception &e) {
130
+ } catch (exception &e) {
146
131
std::cout << e.what () << std::endl;
147
132
}
148
133
#else
0 commit comments