diff --git a/tests/basic.cpp b/tests/basic.cpp index a3d2e4b..33f9bf6 100644 --- a/tests/basic.cpp +++ b/tests/basic.cpp @@ -146,5 +146,7 @@ int main() { sycl::free(data, q); + std::cout << "Test Passed!!!" << std::endl; + return 0; } diff --git a/tests/fig-2-2_simple-sycl-program.cpp b/tests/fig-2-2_simple-sycl-program.cpp index 42429af..cbac98f 100644 --- a/tests/fig-2-2_simple-sycl-program.cpp +++ b/tests/fig-2-2_simple-sycl-program.cpp @@ -34,5 +34,7 @@ int main() { } } + std::cout << "Test Passed!!!" << std::endl; + return 0; } \ No newline at end of file diff --git a/tests/fig-2-9_selecting-host-device.cpp b/tests/fig-2-9_selecting-host-device.cpp index b9d678c..94e68b1 100644 --- a/tests/fig-2-9_selecting-host-device.cpp +++ b/tests/fig-2-9_selecting-host-device.cpp @@ -22,5 +22,8 @@ int main() { } std::cout << "Device is CPU: OK" << std::endl; + + std::cout << "Test Passed!!!" << std::endl; + return 0; } \ No newline at end of file diff --git a/tests/fig-3-4_usm-explicit-data-movement.cpp b/tests/fig-3-4_usm-explicit-data-movement.cpp index 91ba25d..0781794 100644 --- a/tests/fig-3-4_usm-explicit-data-movement.cpp +++ b/tests/fig-3-4_usm-explicit-data-movement.cpp @@ -11,23 +11,23 @@ int main() { sycl::queue Q; std::array host_array; - int *device_array = sycl::malloc_device(N, Q); + int* device_array = sycl::malloc_device(N, Q); for (int i = 0; i < N; i++) { host_array[i] = N; } // We will learn how to simplify this example later - Q.submit([&](sycl::handler &h) { + Q.submit([&](sycl::handler& h) { // copy hostArray to deviceArray h.memcpy(device_array, &host_array[0], N * sizeof(int)); }).wait(); - Q.submit([&](sycl::handler &h) { + Q.submit([&](sycl::handler& h) { h.parallel_for(N, [=](sycl::id<1> i) { device_array[i]++; }); }).wait(); - Q.submit([&](sycl::handler &h) { + Q.submit([&](sycl::handler& h) { // copy deviceArray back to hostArray h.memcpy(&host_array[0], device_array, N * sizeof(int)); }).wait(); @@ -42,5 +42,7 @@ int main() { } } + std::cout << "Test Passed!!!" << std::endl; + return 0; } \ No newline at end of file diff --git a/tests/fig-3-5_usm-implicit-data-movement.cpp b/tests/fig-3-5_usm-implicit-data-movement.cpp new file mode 100644 index 0000000..b00b930 --- /dev/null +++ b/tests/fig-3-5_usm-implicit-data-movement.cpp @@ -0,0 +1,45 @@ +// Figure 3-5. USM implicit data movement +// from book - Data Parallel C++ +// https://link.springer.com/book/10.1007/978-1-4842-5574-2 + +#include + +constexpr int N = 42; + +int main() { + sycl::queue Q; + + int* host_array = malloc_host(N, Q); + int* shared_array = malloc_shared(N, Q); + + for (int i = 0; i < N; i++) { + // Initialize hostArray on host + host_array[i] = i; + } + + // We will learn how to simplify this example later + Q.submit([&](sycl::handler& h) { + h.parallel_for(N, [=](sycl::id<1> i) { + // access sharedArray and hostArray on device + shared_array[i] = host_array[i] + 1; + }); + }).wait(); + + for (int i = 0; i < N; i++) { + // Verify that sharedArray[i] equals hostArray[i] + 1 + if (shared_array[i] != host_array[i] + 1) { + std::cout << "Error at index " << i << ": expected " << (host_array[i] + 1) << ", got " + << shared_array[i] << std::endl; + free(shared_array, Q); + free(host_array, Q); + return 1; + } + } + + free(shared_array, Q); + free(host_array, Q); + + std::cout << "Test Passed!!!" << std::endl; + + return 0; +}