我在为cuda搞一个玩具程序。
我声明一个浮点数数组,将其传输到gpu,并将一个数字传输到该浮点数数组的每个元素,并将其传输回主机系统并打印该数组。然而,这是不可行的,这是给我分割的错误。
,这是代码
#include <iostream>
using namespace std;
__global__ void kern(float *a, float *C){
for (int i = 0; i < 3; i++) C[i] = a[i] + i;
}
int main(){
float *A = new float[3];
for(int i = 0; i < 3; i++){
A[i] = i;
}
float * d;
float * C;
cudaMalloc(&C, sizeof(float)*3);
cudaMalloc(&d, sizeof(float)*3);
cudaMemcpy(&d, A, sizeof(float)*3, cudaMemcpyHostToDevice);
kern<<<1, 1>>>(d, C);
cudaMemcpy(&A, C, sizeof(float)*3, cudaMemcpyDeviceToHost);
cout << A[2];
}
另外,我对Malloc不太熟悉,我大部分的经验都是使用cpp的,因此我对新的datatype[]感到更舒服;库达也有类似的经验吗?
发布于 2014-11-05 03:19:54
将此更改为:
cudaMemcpy(&d, A, sizeof(float)*3, cudaMemcpyHostToDevice);
cudaMemcpy(&A, C, sizeof(float)*3, cudaMemcpyDeviceToHost);
对此:
cudaMemcpy(d, A, sizeof(float)*3, cudaMemcpyHostToDevice);
cudaMemcpy(A, C, sizeof(float)*3, cudaMemcpyDeviceToHost);
而且,通过CUDA
调用来存储返回代码总是更好--它们会让您更好地了解出了什么问题。
https://stackoverflow.com/questions/26755683
复制