From 49235204bc0e7fc0dcfcf6f99a1cb8edb21d54da Mon Sep 17 00:00:00 2001 From: Ben Ashbaugh Date: Tue, 1 Aug 2023 22:17:50 -0700 Subject: [PATCH] add an SVM unmap test see: https://github.com/KhronosGroup/OpenCL-Docs/issues/890 --- samples/99_svmunmap/CMakeLists.txt | 6 +++ samples/99_svmunmap/main.cpp | 87 ++++++++++++++++++++++++++++++ samples/CMakeLists.txt | 2 + 3 files changed, 95 insertions(+) create mode 100644 samples/99_svmunmap/CMakeLists.txt create mode 100644 samples/99_svmunmap/main.cpp diff --git a/samples/99_svmunmap/CMakeLists.txt b/samples/99_svmunmap/CMakeLists.txt new file mode 100644 index 0000000..206ca9f --- /dev/null +++ b/samples/99_svmunmap/CMakeLists.txt @@ -0,0 +1,6 @@ +add_opencl_sample( + TEST + NUMBER 99 + TARGET svmunmap + VERSION 200 + SOURCES main.cpp) diff --git a/samples/99_svmunmap/main.cpp b/samples/99_svmunmap/main.cpp new file mode 100644 index 0000000..76fbece --- /dev/null +++ b/samples/99_svmunmap/main.cpp @@ -0,0 +1,87 @@ +/* +// Copyright (c) 2019-2021 Ben Ashbaugh +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +*/ + +#include + +#include + +const size_t gwx = 1024*1024; + +int main( + int argc, + char** argv ) +{ + int platformIndex = 0; + int deviceIndex = 0; + + { + popl::OptionParser op("Supported Options"); + op.add>("p", "platform", "Platform Index", platformIndex, &platformIndex); + op.add>("d", "device", "Device Index", deviceIndex, &deviceIndex); + + bool printUsage = false; + try { + op.parse(argc, argv); + } catch (std::exception& e) { + fprintf(stderr, "Error: %s\n\n", e.what()); + printUsage = true; + } + + if (printUsage || !op.unknown_options().empty() || !op.non_option_args().empty()) { + fprintf(stderr, + "Usage: copybuffer [options]\n" + "%s", op.help().c_str()); + return -1; + } + } + + std::vector platforms; + cl::Platform::get(&platforms); + + printf("Running on platform: %s\n", + platforms[platformIndex].getInfo().c_str() ); + + std::vector devices; + platforms[platformIndex].getDevices(CL_DEVICE_TYPE_ALL, &devices); + + printf("Running on device: %s\n", + devices[deviceIndex].getInfo().c_str() ); + + cl::Context context{devices[deviceIndex]}; + cl::CommandQueue commandQueue = cl::CommandQueue{context, devices[deviceIndex]}; + + void* ptr = clSVMAlloc(context(), CL_MEM_READ_WRITE, 1024, 0); + printf("clSVMAlloc returned %p\n", ptr); + + cl_event event = nullptr; + cl_int errorCode = clEnqueueSVMUnmap( + commandQueue(), + ptr, + 0, + nullptr, + &event); + printf("clEnqueueSVMUnmap returned %d, event is %p.\n", errorCode, event); + clReleaseEvent(event); + + clSVMFree(context(), ptr); + return 0; +} diff --git a/samples/CMakeLists.txt b/samples/CMakeLists.txt index 65cbd34..2169021 100644 --- a/samples/CMakeLists.txt +++ b/samples/CMakeLists.txt @@ -90,6 +90,8 @@ add_subdirectory( 06_ndrangekernelfromfile ) add_subdirectory( 10_queueexperiments ) +add_subdirectory( 99_svmunmap ) + set(BUILD_EXTENSION_SAMPLES TRUE) if(NOT TARGET OpenCLExt) message(STATUS "Skipping Extension Samples - OpenCL Extension Loader is not found.")