gpt4 book ai didi

c++ - 指向设备常量的 CUDA 指针

转载 作者:行者123 更新时间:2023-11-30 02:09:32 25 4
gpt4 key购买 nike

我在 CUDA 设备上定义了以下常量:

__constant__ int deviceTempVariable = 1;

现在我尝试使用两种方法获取 deviceTempVariable 的地址,但我得到了不同的结果。第一种是来自 CUDA 内核的直接内存访问,如下所示:

__global__ void cudaPointers(pointerStruct* devicePointer)
{
devicePointer->itsPointer = &deviceTempVariable;
}

另一种是通过主机代码如下:

cudaGetSymbolAddress((void**) &pointerCuda, "deviceTempVariable");

我很好奇并检查了地址值;第一个给出类似 00000008 的内容,第二个是 00110008。偏移量似乎在所有情况下都相同(数字 8),但其余部分不同。这是怎么回事,我必须使用哪个地址?

最佳答案

在内核中创建的指针显然可以在设备上使用。它可能是一个物理地址,尽管一些 GPU 可能开始添加虚拟化(MMU 和 TLB)。

看起来 cudaGetSymbolAddress 正在为您提供主机处理器可用的地址。这是不同的,因为设备内存已通过偏移量映射到主机的虚拟地址空间。

主机代码应该使用cudaGetSymbolAddress返回的地址,内核代码应该使用address-of operator &

嵌入在共享数据结构中的指针需要使用基于寻址(基本上与数组索引相同,您存储主机和内核都可以找到的已知位置的偏移量)。

关于c++ - 指向设备常量的 CUDA 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5363460/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com