CUDA 6.5:设备同步返回30

时间:2017-07-17 18:54:52

标签: cuda

我有以下问题:

  • 在我的塔式计算机上安装nVidia GTX690,使用CUDA 8.0和VS 2015我写了一个项目(完全正常工作:))

  • 我尝试使用以下配置在我(非常旧)的笔记本电脑上导入它:

    • nVidia GT330M,CUDA功能1.2,与CUDA 6.5兼容
    • Visual Studio 2013 Express
    • nVidia Driver 341.74

可以想象,项目编译得很好,但每次我尝试执行内核(使用任何块/线程的配置)然后同步设备返回错误代码30.这对应于未知的内部错误

我的GPU是否太老了,即使是简单的内核也无法运行(例如,对16Kb缓冲区单次调用cudaMalloc)?

或者,最大nVidia驱动程序版本和CUDA版本之间是否不匹配?

如果可以提供帮助,这里是nvidia-smi的输出:

+------------------------------------------------------+
| NVIDIA-SMI 341.74     Driver Version: 341.74         |
|-------------------------------+----------------------+----------------------+
| GPU  Name            TCC/WDDM | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GT 330M    WDDM  | 0000:01:00.0     N/A |                  N/A |
| N/A   52C   P12    N/A /  N/A |    972MiB /   979MiB |     N/A      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Compute processes:                                               GPU Memory |
|  GPU       PID  Process name                                     Usage      |
|=============================================================================|
|    0            Not Supported                                               |
+-----------------------------------------------------------------------------+

当我尝试获得cudaProperties时,它是我得到的简化版本:

MapSMtoCores for SM 1.2 is undefined.  Default to use 128 Cores/SM
Name                   : GeForce GT 330M
Total Global Memory    : 1073741824
Total Constant Memory  : 65536
Multi-Processor Count  : 6
Compute Mode           : 0
Concurrent Kernels     : 0
Shared Memory Per Block: 16384
Registers   Per Block  : 16384
Max Threads Per Block  : 512
Max Threads Dims       : (512 | 512 | 64)
Max Grid Size          : (65535 | 65535 | 1)

compute_mode是否等于0令人担忧?还是0并发内核?

最后,它可能没有任何区别,但两个系统(塔式和笔记本电脑)都在Windows 10 64位上运行,代码在Visual Studio中仅针对64位进行编译。

[编辑] cudaMalloc和cudaFree工作正常。我正在尝试运行的最简单的内核是:

__global__ void Init(float* __restrict__ ptr, size_t sz, float value)
{
    unsigned int tid = blockIdx.x * blockDim.x + threadIdx.x;
    unsigned int step = gridDim.x * blockDim.x;

    for (size_t i = tid; i < sz; i += step)
        ptr[i] = value;
}

使用Init<<<1, 1>(ptr, 100, 1.0f)

进行调用

1 个答案:

答案 0 :(得分:1)

如果你们中的任何人遇到我同样的问题,那就是我必须做的事情:

  • 重新安装CUDA 6.5(CUDA样本不起作用)
  • 手动下载CUDA样本
  • 复制配置设置并在 32位中运行,因为具有功能的设备不支持64位<= 1.3
  • 删除对 double 精度例程的任何引用,因为不支持这些例程
  • 在处理指针时用size_t替换unsigned int
  • 删除对cudaMallocHost的任何引用,因为1.3
  • 之前不支持明显固定的主机内存