Pascal卡上的CUDA代码失败(GTX 1080)

时间:2016-09-20 09:35:38

标签: cuda cublas

我尝试运行一个可执行文件,它在今天的GTX 1080上使用可分离的编译(Compute Capability 6.1,CUDA 7.5没有直接支持),并且由于第一个CUDA调用失败而无法运行它。我把它追溯到了古巴拉斯,因为这个简单的程序(它甚至不使用古巴拉斯)

#include <cuda_runtime_api.h>
#include <cstdio>

__global__ void foo()
{
}

int main(int, char**)
{
    void * data = nullptr;
    auto err = cudaMalloc(&data, 256);
    printf("%s\n", cudaGetErrorString(err));
    return 0;
}

如果使用

构建失败(输出&#34;未知错误&#34;)
nvcc -dc --gpu-architecture=compute_52 -m64 main.cu -o main.dc.obj
nvcc -dlink --gpu-architecture=compute_52 -m64 -lcublas_device main.dc.obj -o main.obj
link /SUBSYSTEM:CONSOLE /LIBPATH:"%CUDA_PATH%\lib\x64" main.obj main.dc.obj cudart_static.lib cudadevrt.lib cublas_device.lib

如果使用

构建,则工作(输出&#34;无错误&#34;)
nvcc -dc --gpu-architecture=compute_52 -m64 main.cu -o main.dc.obj
nvcc -dlink --gpu-architecture=compute_52 -m64 main.dc.obj -o main.obj
link /SUBSYSTEM:CONSOLE /LIBPATH:"%CUDA_PATH%\lib\x64" main.obj main.dc.obj cudart_static.lib cudadevrt.lib

即使使用CUDA 8候选版本和compute_61构建,只要链接了cublas_device.lib,它仍然会失败。

1 个答案:

答案 0 :(得分:1)

simpleDevLibCublas示例的分析表明,该示例是针对一组真实体系结构(sm_xx)构建的,而不是针对虚拟体系结构(compute_xx)构建的,因此CUDA中的示例7.5不能在较新的卡上运行。此外,CUDA 8RC中的相同示例仅包括一个额外的体系结构sm_60Which is only used by the P100。但是,该示例也可以在6.1卡上运行,例如GTX 1080。即使在CUDA 8RC中,Cublas也不包括对sm_61架构的支持。

因此,如果使用--gpu-architecture=sm_60构建即使链接cublas_device,但也可以使用--gpu-architecture=compute_60--gpu-architecture=sm_61--gpu-architecture=compute_61。或者任何--gpu-architecture=compute_xx