CUDA 6.5:设备同步返回 30

  • 本文关键字:同步 返回 CUDA cuda
  • 更新时间 :
  • 英文 :


我有以下问题:

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

  • 我尝试使用以下配置将其导入我的(非常旧的(笔记本电脑:

    • nVidia GT330M,CUDA 功能 1.2,兼容 CUDA 6.5
    • Visual Studio 2013 Express
    • nVidia 驱动程序 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)打电话

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

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

最新更新