我遇到一个简单的CUDA程序问题,它只添加了两个数字。我在Windows 7上使用Geforce GT320M GPU的笔记本电脑上运行它。我使用Visual Studio 2013
编译此程序(我不知道它是否意味着什么)。问题是我总是得到0
。我试图检查给定的参数(只返回给出数组中方法的所有参数),它们似乎都是0
。我在另一台计算机(大学)运行该程序,它运行完全正常,并返回正确的结果。所以我觉得应该有一些设置问题,但我不确定。
#include <cuda.h>
#include <stdio.h>
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
__global__ void add(int a, int b, int* c)
{
*c = a + b;
return;
}
int main(int argc, char** argv)
{
int c;
int* dev_c;
cudaMalloc((void**)&dev_c, sizeof(int));
add << <1, 1 >> >(1, 2, dev_c);
cudaMemcpy(&c, dev_c, sizeof(int), cudaMemcpyDeviceToHost);
printf("a + b = %d\n", c);
cudaFree(dev_c);
return 0;
}
我还运行了我在某处找到的代码片段。
cudaSetDevice(0);
cudaDeviceSynchronize();
cudaThreadSynchronize();
这不会返回任何内容。
答案 0 :(得分:2)
如果您使用典型的CUDA模板使用CUDA创建新的Visual Studio项目,则必须正确设置要编译的计算功能,并根据需要更改默认值。这可以通过设置,例如
来完成compute_12,sm_12
CUDA C/C++ Configuration Properties
中的。在您的情况下,默认计算功能为2.0
,而您的卡是以前的架构。这是你计算错误的根源。
P.S。截至2014年9月,CUDA 6.5
是唯一支持Visual Studio 2013
的CUDA版本,请参阅Is Cuda 6 supported with Visual Studio 2013?。