Skip to content

Commit 7247f00

Browse files
committed
added virtual mem test for basic access from a kernel
1 parent df9a1a6 commit 7247f00

File tree

1 file changed

+79
-0
lines changed

1 file changed

+79
-0
lines changed
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
// REQUIRES: aspect-ext_oneapi_virtual_mem
2+
3+
// RUN: %{build} -o %t.out
4+
// RUN: %{run} %t.out
5+
6+
#include <sycl/ext/oneapi/experimental/device_architecture.hpp>
7+
#include <sycl/ext/oneapi/virtual_mem/physical_mem.hpp>
8+
#include <sycl/ext/oneapi/virtual_mem/virtual_mem.hpp>
9+
10+
namespace syclext = sycl::ext::oneapi::experimental;
11+
12+
int main() {
13+
sycl::queue Q;
14+
sycl::context Context = Q.get_context();
15+
16+
size_t UsedGranularityInBytes = syclext::get_mem_granularity(Context, syclext::granularity_mode::recommended);
17+
18+
syclext::physical_mem NewPhysicalMem{Q.get_device(), Context, UsedGranularityInBytes};
19+
uintptr_t VirtualMemoryPtr = syclext::reserve_virtual_mem(0, UsedGranularityInBytes, Context);
20+
21+
void *MappedPtr = NewPhysicalMem.map(VirtualMemoryPtr, UsedGranularityInBytes, syclext::address_access_mode::read_write);
22+
23+
int* DataPtr = reinterpret_cast<int*>(MappedPtr);
24+
25+
sycl::range NumItems{UsedGranularityInBytes/sizeof(int)};
26+
27+
std::vector<int> ResultHostData(NumItems.size());
28+
29+
constexpr int ExpectedValueAfterFill = 1;
30+
31+
Q.fill(DataPtr,ExpectedValueAfterFill , NumItems.size()).wait_and_throw();
32+
{
33+
sycl::buffer<int> CheckBuffer(ResultHostData);
34+
Q.submit([&](auto &handle) {
35+
sycl::accessor A(CheckBuffer, handle, sycl::write_only);
36+
handle.parallel_for(NumItems, [=](auto i) { A[i] = DataPtr[i]; });
37+
});
38+
}
39+
40+
for (size_t i = 0; i < ResultHostData.size(); i++) {
41+
if (ResultHostData[i] != ExpectedValueAfterFill) {
42+
std::cout << "Comparison failed after fill operation at index " << i << ": " << ResultHostData[i]
43+
<< " != " <<ExpectedValueAfterFill << std::endl;
44+
return 1;
45+
}
46+
}
47+
48+
Q.submit([&](auto &handle) {
49+
handle.parallel_for(NumItems, [=](auto i) {
50+
DataPtr[i] = i;
51+
});
52+
}).wait_and_throw();
53+
54+
syclext::set_access_mode(DataPtr,UsedGranularityInBytes, syclext::address_access_mode::read, Context);
55+
56+
57+
{
58+
sycl::buffer<int> ResultBuffer(ResultHostData);
59+
60+
Q.submit([&](auto &handle) {
61+
sycl::accessor A(ResultBuffer, handle, sycl::write_only);
62+
handle.parallel_for(NumItems, [=](auto i) { A[i] = DataPtr[i]; });
63+
});
64+
}
65+
66+
for (size_t i = 0; i < NumItems.size(); i++) {
67+
const int ExpectedValue = static_cast<int>(i);
68+
if (ResultHostData[i] != ExpectedValue) {
69+
std::cout << "Comparison failed at index " << i << ": " << ResultHostData[i]
70+
<< " != " << ExpectedValue<< std::endl;
71+
return 1;
72+
}
73+
}
74+
75+
syclext::unmap(MappedPtr, UsedGranularityInBytes, Context);
76+
syclext::free_virtual_mem(VirtualMemoryPtr, UsedGranularityInBytes, Context);
77+
78+
return 0;
79+
}

0 commit comments

Comments
 (0)