【发布时间】:2014-04-21 00:51:51
【问题描述】:
编辑:我可能找到了更好的方法,使用 CUDAMalloc(); 我想这是一个糟糕的问题,但我会尝试 Malloc,如果这看起来更合乎逻辑,那么我将关闭它。
所以我可以稍微用 CUDA C/C++ 编写代码,但我正在查看 CUDAMemcpy 语法,我看到它复制到指定的设备。但是为什么我在函数调用中指定主机上的两块内存,就像在这个写得不好的例子中(我知道它没有初始化值......),我告诉它复制 h_array1/h_array2 到各自设备阵列。为什么有必要在主机内存中创建 d_Array,或者是吗?
代码如下:
#include <cuda.h>
#include <iostream>
using std::cout;
unsigned long int arraysize = 20;
__global__ void CUDAAddArray(float* arrayfloat, float* arrayfloat2){
int idx = blockIdx.x * blockDim.x + threadIdx.x;
arrayfloat[idx] += arrayfloat2[idx];
//end cuda kernel __global__ void CUDAAddArray();
}
int main() {
float* h_array1 = new float[arraysize];
float* h_array2 = new float[arraysize];
float* d_array1 = new float[arraysize];
float* d_array2 = new float[arraysize];
cudaMemcpy(d_array1, h_array1, sizeof(float)*arraysize, cudaMemcpyHostToDevice);
cudaMemcpy(d_array2, h_array2, sizeof(float)*arraysize, cudaMemcpyHostToDevice);
CUDAAddArray<<<(arraysize%256)+1, 100>>> (d_array1, d_array2);
cudaMemcpy(h_array1, d_array1, sizeof(float)*arraysize, cudaMemcpyDeviceToHost);
cudaMemcpy(h_array2, d_array2, sizeof(float)*arraysize, cudaMemcpyDeviceToHost);
for(int i = 0; i < arraysize; i++){
cout << h_array1[i];
cout << "\n";
}
cout << std::endl;
return NULL;
}
谢谢,CUDA 新手。
【问题讨论】: