CUDA - 简单的加法器程序总是给出零

时间:2014-09-28 14:33:29

标签: c++ cuda visual-studio-2013

我遇到一个简单的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();

这不会返回任何内容。

1 个答案:

答案 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?