我有以下问题:
-
在我的塔式计算机上,安装 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 之前不支持显然固定的主机内存