做一个小程序,中间需要给一个实数数组赋值,采用了这样一个函数来完成赋值
void constantInit(float *data, int size2)
{
for (int i = 0; i < size2; i++)
{
data[i] = 1;
}
}
可是 打印的时候结果都是0,调用的函数如下,请教版主和大家,原因在哪里。
void mscan(int m_w)
{
unsigned int size = sizeof(float) * m_w; //
float *h_A = (float *)malloc(size); //CPU里分配数组A的空间首地址和具体空间
constantInit(h_A, m_w); //数组A初始化
float *h_C = (float *)malloc(size); //CPU里分配数组C的空间首地址和具体空间
float *d_A, *d_C,*d_E,*d_EE;
cudaMalloc((void **) &d_A, size); //设备(GPU)里分配数组A的空间首地址和具体空间
cudaMalloc((void **) &d_C, size); // 设备(GPU)里分配数组C的空间首地址和具体空间
unsigned int size1 = sizeof(float) * d_n;
cudaMalloc((void **) &d_E, size1); // 设备(GPU)里分配数组E的空间首地址和具体空间
cudaMalloc((void **) &d_EE, size1); // 设备(GPU)里分配数组EE的空间首地址和具体空间
cudaMemcpy(d_A, h_A, size, cudaMemcpyHostToDevice); //拷贝数据去gpu
scan <<< d_n, THREADBLOCK_SIZE >>>(d_C, d_A,d_E, 2*THREADBLOCK_SIZE);
scan1 <<< 1, d_n/2 >>>(d_EE, d_E,d_n);
add <<< d_n, THREADBLOCK_SIZE >>>(d_C, d_EE, 2*THREADBLOCK_SIZE);
cudaMemcpy(h_C, d_C, size, cudaMemcpyDeviceToHost); //拷贝数据回cpu
for (int i = 0; i < 10 ; i++)
{
printf("%d",h_A[i]);
}
cudaDeviceReset();
}