parent
1f29bc4092
commit
dcc606ad47
@ -2680,6 +2680,12 @@ bool cmVisualStudio10TargetGenerator::ComputeCudaOptions(
|
||||
cudaOptions.Parse(defineFlags.c_str());
|
||||
cudaOptions.ParseFinish();
|
||||
|
||||
// If we haven't explicitly enabled GPU debug information
|
||||
// explicitly disable it
|
||||
if (!cudaOptions.HasFlag("GPUDebugInfo")) {
|
||||
cudaOptions.AddFlag("GPUDebugInfo", "false");
|
||||
}
|
||||
|
||||
if (this->GeneratorTarget->GetPropertyAsBool("CUDA_SEPARABLE_COMPILATION")) {
|
||||
cudaOptions.AddFlag("GenerateRelocatableDeviceCode", "true");
|
||||
} else if (this->GeneratorTarget->GetPropertyAsBool(
|
||||
|
@ -1,6 +1,7 @@
|
||||
|
||||
ADD_TEST_MACRO(CudaOnly.EnableStandard CudaOnlyEnableStandard)
|
||||
ADD_TEST_MACRO(CudaOnly.ExportPTX CudaOnlyExportPTX)
|
||||
ADD_TEST_MACRO(CudaOnly.GPUDebugFlag CudaOnlyGPUDebugFlag)
|
||||
ADD_TEST_MACRO(CudaOnly.ResolveDeviceSymbols CudaOnlyResolveDeviceSymbols)
|
||||
ADD_TEST_MACRO(CudaOnly.SeparateCompilation CudaOnlySeparateCompilation)
|
||||
ADD_TEST_MACRO(CudaOnly.WithDefs CudaOnlyWithDefs)
|
||||
ADD_TEST_MACRO(CudaOnly.ResolveDeviceSymbols CudaOnlyResolveDeviceSymbols)
|
||||
|
23
Tests/CudaOnly/GPUDebugFlag/CMakeLists.txt
Normal file
23
Tests/CudaOnly/GPUDebugFlag/CMakeLists.txt
Normal file
@ -0,0 +1,23 @@
|
||||
|
||||
cmake_minimum_required(VERSION 3.7)
|
||||
project (CudaOnlGPUDebugFlag CUDA)
|
||||
|
||||
#Goal for this example:
|
||||
#verify that -G enables gpu debug flags
|
||||
string(APPEND CMAKE_CUDA_FLAGS " -gencode=arch=compute_30,code=compute_30")
|
||||
string(APPEND CMAKE_CUDA_FLAGS " -G")
|
||||
set(CMAKE_CUDA_STANDARD 11)
|
||||
|
||||
add_executable(CudaOnlyGPUDebugFlag main.cu)
|
||||
|
||||
if(CMAKE_CUDA_COMPILER_VERSION VERSION_LESS 9.0.0)
|
||||
#CUDA's __CUDACC_DEBUG__ define was added in 9.0
|
||||
#so if we are below 9.0.0 we will manually add the define so that the test
|
||||
#passes
|
||||
target_compile_definitions(CudaOnlyGPUDebugFlag PRIVATE "__CUDACC_DEBUG__")
|
||||
endif()
|
||||
|
||||
if(APPLE)
|
||||
# Help the static cuda runtime find the driver (libcuda.dyllib) at runtime.
|
||||
set_property(TARGET CudaOnlyGPUDebugFlag PROPERTY BUILD_RPATH ${CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES})
|
||||
endif()
|
66
Tests/CudaOnly/GPUDebugFlag/main.cu
Normal file
66
Tests/CudaOnly/GPUDebugFlag/main.cu
Normal file
@ -0,0 +1,66 @@
|
||||
#include <cuda.h>
|
||||
#include <cuda_runtime.h>
|
||||
#include <iostream>
|
||||
|
||||
static __global__ void debug_kernel(bool* has_debug)
|
||||
{
|
||||
// Verify using the return code if we have GPU debug flag enabled
|
||||
#if defined(__CUDACC__) && defined(__CUDACC_DEBUG__)
|
||||
*has_debug = true;
|
||||
#else
|
||||
*has_debug = false;
|
||||
#endif
|
||||
}
|
||||
|
||||
int choose_cuda_device()
|
||||
{
|
||||
int nDevices = 0;
|
||||
cudaError_t err = cudaGetDeviceCount(&nDevices);
|
||||
if (err != cudaSuccess) {
|
||||
std::cerr << "Failed to retrieve the number of CUDA enabled devices"
|
||||
<< std::endl;
|
||||
return 1;
|
||||
}
|
||||
for (int i = 0; i < nDevices; ++i) {
|
||||
cudaDeviceProp prop;
|
||||
cudaError_t err = cudaGetDeviceProperties(&prop, i);
|
||||
if (err != cudaSuccess) {
|
||||
std::cerr << "Could not retrieve properties from CUDA device " << i
|
||||
<< std::endl;
|
||||
return 1;
|
||||
}
|
||||
if (prop.major >= 3) {
|
||||
err = cudaSetDevice(i);
|
||||
if (err != cudaSuccess) {
|
||||
std::cout << "Could not select CUDA device " << i << std::endl;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::cout << "Could not find a CUDA enabled card supporting compute >=3.0"
|
||||
<< std::endl;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
bool* has_debug;
|
||||
cudaError_t err = cudaMallocManaged(&has_debug, sizeof(bool));
|
||||
|
||||
debug_kernel<<<1, 1>>>(has_debug);
|
||||
err = cudaDeviceSynchronize();
|
||||
if (err != cudaSuccess) {
|
||||
std::cerr << "debug_kernel: kernel launch shouldn't have failed\n"
|
||||
<< "reason:\t" << cudaGetErrorString(err) << std::endl;
|
||||
return 1;
|
||||
}
|
||||
if (*has_debug == false) {
|
||||
std::cerr << "debug_kernel: kernel not compiled with device debug"
|
||||
<< std::endl;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user