gpt4 book ai didi

c - 初学者如何使用常量内存(Cuda C)

转载 作者:太空狗 更新时间:2023-10-29 16:06:39 28 4
gpt4 key购买 nike

我有 3 个常量值(ABC),我想将它们保存在常量内存中;我通过输入以下代码行找到了一种方法:

// CUDA global constants
__constant__ int A;
__constant__ int B;
__constant__ int C;

int main(void)
{

float pA=1;
float pB=2;
float pC=3;
...
cudaMemcpyToSymbol(A, &pA, sizeof(A));
cudaMemcpyToSymbol(B, &pB, sizeof(B));
cudaMemcpyToSymbol(C, &pC, sizeof(C));
...
}

但是我认为这不是最好的方法,因为如果我有更多的常量,它会变得非常不方便。

这是我的问题:如何复制上面编写的代码行以获得更紧凑的形式?

最佳答案

CUDA中的常量内存是一 block 65536字节的专用内存空间。它是专用的,因为它具有一些特殊功能,例如缓存和广播。

The constant memory space resides in device memory and is cached in the constant cache mentioned in Compute Capability 1.x and Compute Capability 2.x.

见节。 5.3.2.设备内存访问和 Sect。 G.4.4.有关更多详细信息,请参阅 CUDA C 编程指南中的常量内存。

因此,您可以像之前那样为一个元素分配常量内存,也可以为一组元素分配内存。

__constant__ float c_ABC[3]; // 3 elements of type float (12 bytes)

但是,在 CUDA 中不允许动态分配常量内存。因此,您必须像处理一个元素一样将数据从 CPU 复制到 GPU。

float pABC[] = {1, 2, 3};
...
cudaMemcpyToSymbol(c_ABC, &pABC, 3 * sizeof(float));

您可以在 CPU 中初始化 pABC,例如在循环中或从文件加载数据,然后将数据复制到 GPU 的常量内存中。

请注意,我已将您的示例调整为始终使用 float 。

关于c - 初学者如何使用常量内存(Cuda C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28987495/

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