首页 文章

CUDA 6.5:设备同步返回30

提问于
浏览
-2

我有以下问题:

  • 在我的塔式计算机上,安装了一个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太老了,甚至连一个简单的内核也无法运行(例如对cudaMalloc的单次调用,对于16Kb缓冲区)?

或者是最大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 回答

  • 1

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

    • 重新安装CUDA 6.5(CUDA样本不起作用)

    • 手动下载CUDA样本

    • 复制配置设置并在 32 bit 中运行,因为功能<= 1.3的设备不支持64位

    • 删除对 double 精度例程的任何引用,因为不支持这些例程

    • 在处理指针时用 unsigned int 替换 size_t

    • 删除对 cudaMallocHost 的任何引用,因为在1.3之前不支持明显固定的主机内存

相关问题