我写了一个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
这并不令人兴奋。
答案 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)。