将静态数组复制到 managedCUDA 中的主机

Copy a static array to host in managedCUDA

我在 kernel.cu 文件中声明了一个静态数组

__device__ int myStaticArray[5];

我可以使用

从主机修改这个数组
myKernel.SetConstantVariable("myStaticArray", new int[]{1,2,3,4,5});

经过一些处理,我想把这个数组复制到host中,怎么办?

EDIT1:我注意到每次 运行 一个新内核时数组都会被重置。我不能使用该数组来保留要在下一个内核中使用的中间值。是否可以以静态方式保留这些值?

EDIT2EDIT1 中出现问题是因为我使用 LoadKernelPTX 加载了多个内核。正确的方法是加载一次模块,然后从该模块构建多个内核。 (如 https://github.com/kunzmi/managedCuda/wiki/CudaKernel 中所建议)这样,我可以在多个内核之间共享静态 array/variable。

要么将数组声明为 __device__ __constant__ int myStaticArray[5]; 并将其视为常量数组(即不写入)。然后您可以使用 myKernel.SetConstantVariable(...).

从主机初始化值

或者您将其保留为 __device__ int myStaticArray[5];,然后您可以使用收集指向该静态变量的指针的构造函数 CudaDeviceVariable(CUmodule module, string name) 声明一个 CudaDeviceVariable。然后您可以像往常一样执行任何复制到主机或复制到设备。

请注意,如果变量未声明为 extern "C",则 Cuda 中的名称会被破坏,因此您可能需要在 PTX 文件中查找完整的破坏名称。