为什么AddVector CUDA C 不起作用
Why AddVector CUDA c++ is not working?
我正在尝试使用CUDA添加2个数组,但它不起作用。
我做了所有应该完成的事情:
1)i并行使vectorAdd函数
2)我将内存分配给GPU并将数据移至GPU
3)和最后一件事,我修改了函数vectorAdd以在gpu
上运行这是代码:
#define SIZE 1024
__global__ void VectorAdd(int *a, int *b, int *c, int n)
{
int i = threadIdx.x ;
if(i < n)
c[i] = a[i] + b[i];
}
int main()
{
int *a , *b , *c;
int *d_a , *d_b , *d_c;
a = (int *)malloc(SIZE * sizeof(int));
b = (int *)malloc(SIZE * sizeof(int));
c = (int *)malloc(SIZE * sizeof(int));
cudaMalloc( &d_a , SIZE * sizeof(int) );
cudaMalloc( &d_b , SIZE * sizeof(int) );
cudaMalloc( &d_c , SIZE * sizeof(int) );
for ( int i = 0 ; i < SIZE ; ++i)
{
a[i] = i ;
b[i] = i ;
c[i] = 0 ;
}
cudaMemcpy(d_a, a, SIZE *sizeof(int), cudaMemcpyHostToDevice);
cudaMemcpy(d_b, b, SIZE *sizeof(int), cudaMemcpyHostToDevice);
cudaMemcpy(d_c, c, SIZE *sizeof(int), cudaMemcpyHostToDevice);
VectorAdd<<< 1, SIZE >>>(d_a, d_b, d_c, SIZE);
cudaMemcpy(c, d_c, SIZE * sizeof(int), cudaMemcpyDeviceToHost);
for(int i = 0 ; i < 10 ; ++i)
{
printf("C[%d] = %dn", i, c[i]);
}
free(a);
free(b);
free(c);
cudaFree(d_a);
cudaFree(d_b);
cudaFree(d_c);
return 0;
}
控制台上的输出是这样的: c[0] = 0 , c[1] = 0 , c[2] = 0 , c[3] = 0 , c[4] = 0 ....
为什么应该是: c[0] = 0 ; c[1] = 2 ; c[2] = 4 ....
在您的情况下,问题取决于您使用过的GPU。您的内核每块1024个线程启动。由于您的GPU具有计算能力1.x 1.x,每个块仅支持512或768个线程。可以在官方编程指南中找到详细列表。由于您没有使用适当的CUDA错误检查,因此您无法获得CUDA运行时API返回的错误。@talonmies在此答案/问题中给出了CUDA错误检查的好指南。
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- C++为什么尽管我调用了void函数,它却不起作用
- 为什么在保护模式下继承升级不起作用
- 循环在计数器中不起作用
- 在其他文件中创建类时在 c++ 项目中不起作用
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 为什么二进制搜索在我的测试中不起作用
- Cuda 基本程序 (将值写入矩阵和 std:cout 不起作用) ;主功能不启动
- CUDA我的共享内存代码不起作用,我缺少什么
- CUDA中的洗牌指令不起作用
- 为什么AddVector CUDA C 不起作用
- 检查 CUDA 内核中的device_vector不起作用
- OpenCL(来自 CUDA 的端口)中的暴力破解不起作用
- nVidia CUDA 代码不起作用?
- CUDA 共享内存编程不起作用
- CUDA 和 OpenCV。从 Mat 到 GpuMat 的转换不起作用
- Cuda __syncthreads()在我的代码中不起作用
- CUDA:使用具有共享内存的全局线程索引不起作用