1
我最近设置了Ubuntu 14.04.1 LTS。我正在编写一个我写的矩阵加法程序,matrixAddition.cu。我编译这样的代码:nvcc matrixAddition.cu -o matAdd。 生成的矩阵应显示7 7 7 ...因为我添加了一个数组为5的数组2.但是,它为我打印了5 5 5 ...。内核因为某种原因失败了吗?我是否缺少一些代码?谢谢阅读。C++ Cuda代码不运行内核
matrixAddition.cu
#include <iostream>
#include <stdio.h>
__global__ void matAdd(int * d_arra, int * d_arrb, int * length)
{
int id = threadIdx.x;
if(id<*length)
{
d_arra[id]=d_arra[id]+d_arrb[id];
}
}
int main() {
//cpu varriables
int arra[100];
int arrb[100];
int leng = 100;
//gpu varriables
int * d_arra;
int * d_arrb;
int * length;
//-std=c++11
for(int itr=0;itr<100;itr++){arra[itr]=5;arrb[itr]=2;}
cudaMalloc((void**)&d_arra, 100*sizeof(int));
cudaMalloc((void**)&d_arrb, 100*sizeof(int));
cudaMemcpy(d_arra, arra, 100*sizeof(int), cudaMemcpyHostToDevice);
cudaMemcpy(d_arrb, arrb, 100*sizeof(int), cudaMemcpyHostToDevice);
cudaMemcpy(length, &leng, sizeof(int), cudaMemcpyHostToDevice);
//max thread per block 1024
matAdd<<<1, 1024>>>(d_arra, d_arrb, length);
cudaMemcpy(arra, d_arra, 100*sizeof(int), cudaMemcpyDeviceToHost);
cudaFree(d_arra);
cudaFree(d_arrb);
cudaFree(length);
std::cout << " our data \n";
for(int itr=0;itr<100;itr++){std::cout << arra[itr]; if(itr%10==0&&itr!=0){std::cout <<"\n";}}
std::cout<<std::endl;
return 0;
}
无论何时您遇到CUDA代码问题,最好使用[适当的cuda错误检查](http://stackoverflow.com/questions/14038589/what-is-the-canonical-方式对检查换错误 - 使用最CUDA的运行时API)。 (但我相信袁的答案是正确的。) –