我的CUDA测试程序将0.5添加到双精度数组中不会将0.5添加到双精度数组

时间:2015-10-14 11:55:28

标签: cuda

我写了一个CUDA测试程序,因为我的更复杂的程序无效。这个也不起作用。

它该怎么办?

我已经编写了一个测试程序(我认为),可以在数组中添加0.5。或者至少是它应该做的事情。

以下是代码:

#include <iostream>

#include <cuda.h>

__global__
void cuda_kernel_func(double *in, double *out, int count)
{
    int index = blockIdx.x;
    if(index < count)
    {
        out[index] = in[index] + 0.5;
    }
}

int main()
{

    int num = 10;
    double *out;
    double *d_out;
    double *in;
    double *d_in;

    out = (double*)malloc(num * sizeof(double));
    in = (double*)malloc(num * sizeof(double));
    cudaMalloc(&d_out, num * sizeof(double));
    cudaMalloc(&d_in, num * sizeof(double));

    for(int i = 0; i < num; ++ i)
    {
        in[i] = (double)i;
    }

    cudaMemcpy(d_in, in, num * sizeof(double), cudaMemcpyHostToDevice);

    cuda_kernel_func<<<num, 1>>>(d_in, d_out, num);
    cudaDeviceSynchronize();

    cudaMemcpy(out, d_out, num * sizeof(double), cudaMemcpyDeviceToHost);

    cudaFree(d_in);
    cudaFree(d_out);

    for(int i = 0; i < num; ++ i)
    {
        std::cout << out[i] << " ";
    }
    std::cout << std::endl;

    free(in);
    free(out);

    return 0;
}

我是CUDA的新手,但不是并行化或C / C ++。我认为代码是相当不言自明的。

输出:

0 0 0 0 0 0 0 0 0 0

这并不令人兴奋。

1 个答案:

答案 0 :(得分:3)

您应始终使用proper CUDA error checking

cuda_kernel_func<<<num, 1>>>(d_in, d_out, num);
gpuErrchk( cudaPeekAtLastError() );

在您的情况下(编译错误的架构),错误将是:

  

GPUassert:设备功能无效main.cu 48

由于您声明您拥有supports Compute Capability 1.3的GTX 260,因此您需要使用支持此架构的CUDA版本。

CUDA 6.5是您可以用于GPU架构的最新版本(请参阅release notes)。

第一个不支持sm_1x的CUDA版本是CUDA 7(请参阅release notes)。