如何在CUDA中使用和声明全局__device__数组?

时间:2017-08-11 01:53:52

标签: cuda

我想在运行时在设备内存中声明一个可由所有设备函数访问的全局范围数组。执行以下操作可以满足编译器:

__device__ float *g_array;

但是,我现在正在cudaMemcpycudaMalloc收到编译器警告我正在从主机功能访问设备变量。我认为我需要获取实际的设备地址,所以我尝试了cudaGetSymbolAddress但是我得到Invalid device symbol error

这基本上就是我想做的事情:

__device__ float *g_array;
__constant__ int N;

__global__ void device_add_one()
{
    for (int index = blockIdx.x * blockDim.x + threadIdx.x;
         index < N;
         index += blockDim.x * gridDim.x)
    {
         g_array[index] += 1;
    {
}

void init_arrays(float *host_array, int size)
{
    cudaMalloc(&g_array, (size * sizeof(float));
    cudaMemcpy(g_array, host_array, (size * sizeof(float)), cudaMemcpyHostToDevice);

    cudaMemcpyToSymbol(N, &size, sizeof(N));

    device_add_one<< < 1, 254>> >();

    cudaMemcpy(host_array, g_array, (size * sizeof(float), cudaMemcpyDeviceToHost);
}

注意:必须使用可计算性2.0

0 个答案:

没有答案