summaryrefslogtreecommitdiffstats
path: root/Tests/CudaOnly/ResolveDeviceSymbols
diff options
context:
space:
mode:
authorRobert Maynard <robert.maynard@kitware.com>2017-12-13 22:34:48 (GMT)
committerRobert Maynard <robert.maynard@kitware.com>2017-12-13 22:34:48 (GMT)
commit8164298935cdd0970a4e86327184866496694b65 (patch)
treec9a5b5dfaa1c8916b1e24fb5ee64d1edc0e75530 /Tests/CudaOnly/ResolveDeviceSymbols
parent9720c142559ad8b48326de1fb636ae66e1f74184 (diff)
downloadCMake-8164298935cdd0970a4e86327184866496694b65.zip
CMake-8164298935cdd0970a4e86327184866496694b65.tar.gz
CMake-8164298935cdd0970a4e86327184866496694b65.tar.bz2
Cuda: ResolveDeviceSymbols now properly execute everywhere.
The previous version had two bugs that caused the JIT runtime errors. 1. It was building the executable without separable compilation enabled 2. All kernel launches will fail if any kernel is missing a symbol, that is why the call to file2_launch_kernel had to be removed
Diffstat (limited to 'Tests/CudaOnly/ResolveDeviceSymbols')
-rw-r--r--Tests/CudaOnly/ResolveDeviceSymbols/CMakeLists.txt14
-rw-r--r--Tests/CudaOnly/ResolveDeviceSymbols/main.cu11
2 files changed, 10 insertions, 15 deletions
diff --git a/Tests/CudaOnly/ResolveDeviceSymbols/CMakeLists.txt b/Tests/CudaOnly/ResolveDeviceSymbols/CMakeLists.txt
index 8d6551b..83473ae 100644
--- a/Tests/CudaOnly/ResolveDeviceSymbols/CMakeLists.txt
+++ b/Tests/CudaOnly/ResolveDeviceSymbols/CMakeLists.txt
@@ -16,11 +16,11 @@ else()
endif()
#Goal for this example:
-#Build a static library that defines multiple methods and kernels that
-#use each other.
-#Use a custom command to build an executable that uses this static library
-#We do these together to verify that we can get a static library to do
-#device symbol linking, and not have it done when the executable is made
+# Build a static library that defines multiple methods and kernels that
+# use each other.
+# Resolve the device symbols into that static library
+# Verify that we can't use those device symbols from anything that links
+# to the static library
string(APPEND CMAKE_CUDA_FLAGS " -gencode arch=compute_30,code=compute_30")
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CUDA_STANDARD 11)
@@ -43,6 +43,10 @@ add_custom_command(TARGET CUDAResolveDeviceLib POST_BUILD
endif()
add_executable(CudaOnlyResolveDeviceSymbols main.cu)
+set_target_properties(CudaOnlyResolveDeviceSymbols
+ PROPERTIES
+ CUDA_SEPARABLE_COMPILATION ON)
+
target_link_libraries(CudaOnlyResolveDeviceSymbols PRIVATE CUDAResolveDeviceLib)
if(APPLE)
diff --git a/Tests/CudaOnly/ResolveDeviceSymbols/main.cu b/Tests/CudaOnly/ResolveDeviceSymbols/main.cu
index b4b5b9e..d464f96 100644
--- a/Tests/CudaOnly/ResolveDeviceSymbols/main.cu
+++ b/Tests/CudaOnly/ResolveDeviceSymbols/main.cu
@@ -62,17 +62,8 @@ int main(int argc, char** argv)
return 0;
}
- cudaError_t err;
- file2_launch_kernel(42);
- err = cudaGetLastError();
- if (err != cudaSuccess) {
- std::cerr << "file2_launch_kernel: kernel launch failed: "
- << cudaGetErrorString(err) << std::endl;
- return 1;
- }
-
main_launch_kernel(1);
- err = cudaGetLastError();
+ cudaError_t err = cudaGetLastError();
if (err == cudaSuccess) {
// This kernel launch should fail as the file2_func was device linked
// into the static library and is not usable by the executable