gpt4 book ai didi

cuda - 在不同的源文件上使用相同的常量内存数组

转载 作者:行者123 更新时间:2023-12-01 02:18:38 25 4
gpt4 key购买 nike

我有一个 __constant__保存许多内核所需信息的内存阵列,这些信息放置在不同的源文件中。这个常量内存数组在头文件 GlobalParameters.h 中定义。 , 即 #included包含需要访问此数组的内核的所有文件。

just discovered (看看 talonmies 的回答)__constant memory__仅在定义它的翻译单元中可用,除非您打开单独编译(使用 CUDA 5.0 或更高版本)。

我仍然不完全明白这对我的情况意味着什么。

假设我不能打开单独编译,有没有办法处理我的需求?我应该在哪里放置我的常量内存数组的定义?如果我将它放在我的标题中会怎样,即 #included在许多翻译单位?

假设我可以打开单独编译,我是否应该声明我的 __constant__ header 中的内存数组为 extern并将定义放在源文件中(例如 GlobalParameters.cu )?

最佳答案

使常量内存可用于声明的翻译单元以外的翻译单元的一种方法是调用 cudaGetSymbolAddress()并使指针可用于其他函数。

这种技术在某种程度上是在玩火,因为如果您在没有适当屏障和同步的情况下使用指针写入内存,您可能会遇到常量内存和全局内存之间缺乏一致性的问题。

此外,如果您使用此方法,您可能无法获得恒定内存的全部性能优势。这在 SM 2.x 和更高版本的硬件上应该不太正确 - 反汇编目标代码并确保编译器发出“一致加载”指令。

关于cuda - 在不同的源文件上使用相同的常量内存数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22348676/

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