首页 > 解决方案 > cuda 将设备数据复制到主机(再次)

问题描述

在将设备中动态分配的数据复制到主机时,我遇到了与 8 年前和 9 年前(!)错误完全相同的问题 ?和 CUDA - 将设备数据复制到主机?

有人提到这将很快得到解决。这还没有完成还是我在这里做错了什么?运行 Nvidia Cuda 11.1

所以我的代码是

#include "cuda.h"
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <stdio.h>

#define N 400
__device__ int* d_array;

__global__ void allocDeviceMemory() {
    d_array = new int[N];
    for (int i = 0; i < N; i++) d_array[i] = 123;
}

int main() {
    allocDeviceMemory <<<1, 1>>> ();
    cudaDeviceSynchronize();

    int* d_a = NULL;
    cudaMemcpyFromSymbol((void**) &d_a, d_array, sizeof(d_a), 0, cudaMemcpyDeviceToHost);
    printf("gpu adress: %p\n", d_a);

    int* h_array = (int*) malloc(N * sizeof(int));
    cudaError_t errr = cudaMemcpy(h_array, d_a, N * sizeof(int), cudaMemcpyDeviceToHost);
    printf("h_array: %d, %d\n", h_array[0], errr);
    printf("%s\n", cudaGetErrorString(errr)); //invalid argument
    return errr;
}

标签: cuda

解决方案


推荐阅读