问题标签 [gpu-constant-memory]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
memory - CUDA 常量内存分配是如何工作的?
我想了解一下如何分配常量内存(使用 CUDA 4.2)。我知道总可用的常量内存是 64KB。但是这个内存是什么时候在设备上实际分配的呢?这个限制适用于每个内核、cuda 上下文还是整个应用程序?
假设一个.cu
文件中有几个内核,每个内核都使用不到 64K 的常量内存。但总的恒定内存使用量超过 64K。是否可以按顺序调用这些内核?如果使用不同的流同时调用它们会发生什么?
如果有一个大型 CUDA 动态库,其中有很多内核,每个内核都使用不同数量的常量内存,会发生什么?
如果有两个应用程序每个都需要一半以上的可用常量内存会发生什么?第一个应用程序运行良好,但第二个应用程序何时会失败?在应用程序启动时、cudaMemcpyToSymbol()
调用时还是内核执行时?
cuda - cuda 使用常量内存作为二维数组
我在一个多线程“主机”程序中实现我的内核,其中每个主机线程都在调用内核。我在使用常量内存时遇到了问题。在常量内存中会放置一些参数,但是对于每个线程它们是不同的。我也在发生问题的地方建立了一个样本。
这是内核
一个 pthread 正在调用这个函数。
常量内存就是这样声明的。
对于每个主机线程都有不同的值,h_piCoeff
并将其复制到常量内存中。
现在我为每个 pthread 调用得到相同的结果,因为它们都在 c_iaCoeff
. 我认为这是常量内存如何工作并且必须在上下文中声明的问题 - 在示例中,只有一个c_iaCoeff
为所有 pthreads 调用声明,而 pthreads 调用的内核将获得最后一个的值cudaMemcpyToSymbol
。是对的吗?
现在我试图在一个二维数组中改变我的常量内存。第二个维度将是之前的值,但第一个维度将是使用的 pthread 的索引。
在内核中将采用这种方式。
但是我不知道是否可以这样使用常量内存,是吗?当我尝试将数据复制到常量内存时,我也遇到了错误。
一般是否可以将常量内存用作二维数组,如果可以,我的失败在哪里?
cuda - 持续记忆
我编写了将整数复制到常量内存并在全局函数中使用它的代码,但它不能正常工作。我的意思是全局函数中没有“cuPrintf”工作并且没有打印!
我认为是因为“if(*num == 5)”,因为我删除它,所有“cuPrintf”都会打印我想要的!
我也尝试了“if(num == 5)”,但我的 Visual Studio 没有编译它并显示错误。
为什么“num”在“cuPrintf”中是正确的,但在“if”语句中是不正确的?
我应该如何在“if”语句中使用“num”?
如果我改变:
至
并改变:
至
然后
任何输入都会显示“num=0”!
cuda - CUDA 写入常量内存错误值
我有以下代码可以从主机变量复制到__constant__
CUDA 中的变量
当我从内核中打印时,三个值都为零
要么我没有正确地复制到常量内存,要么......我不知道可能出了什么问题。有什么建议!?我发布了整个主机代码,可能还有其他东西弄乱了常量副本。
更新
主.cu
Imageproc.cuh
Imageproc.cu
实用程序.cuh
实用程序.cu
cuda - CUDA 常量内存最佳实践
我在这里展示一些代码
它只是显示了常量内存和全局内存使用情况。在执行时,“kernel2”的执行速度(就时间而言)比“kernel1”快 4 倍
我从 Cuda C 编程指南中了解到,这是因为对常量内存的访问正在被序列化。这让我想到,如果扭曲访问单个常量值(例如整数、浮点数、双精度等),则可以最好地利用常量内存,但访问数组根本没有好处。换句话说,我可以说扭曲必须访问单个地址,以便从持续的内存访问中获得任何有益的优化/加速收益。这个对吗?
我也想知道,如果我在我的常量内存中保留一个结构而不是简单类型。线程对结构的任何访问;也被认为是单个内存访问或更多?我的意思是一个结构可能包含多个简单的类型和数组,例如;在访问这些简单类型时,这些访问是否也被序列化了?
最后一个问题是,如果我确实有一个具有常量值的数组,需要通过扭曲中的不同线程访问它;为了更快地访问它应该保存在全局内存而不是常量内存中。那是对的吗?
任何人都可以向我推荐一些示例代码,其中显示了有效的恒定内存使用情况。
问候,
cuda - CUDA 常量内存符号
我正在使用 CUDA 5.0,并且我有单独编译的模块。我想从所有模块访问常量内存中的相同值。问题如下,当我在每个模块中定义符号时,链接器声称该符号已被重新定义。是否有解决此问题的解决方法或解决方案?感谢您的帮助。
c++ - CUDA 常量内存错误
我正在尝试使用 CUDA 5.5 做一个具有恒定内存的示例代码。我有 2 个大小为 3000 的常量数组。我有另一个大小为 N 的全局数组 X。我想计算
这是代码。
我正在尝试在此代码上运行调试器以进行分析。事实证明,在复制到常量内存的行上,我使用调试器收到以下错误
有人可以帮我保持记忆吗
caching - 用于 CUDA 中的广播行为的常量缓存与纹理缓存
我对计算能力为 3.5 的设备的常量缓存和纹理缓存之间的差异感兴趣,尤其是广播行为。当一个 warp 中的所有线程从常量内存中发出对相同数据元素的请求并命中缓存时,它会在一个周期内广播到所有线程。在这种情况下,纹理缓存的行为是什么?负载是否被序列化?
另外,我认为常量缓存和纹理缓存都是每个多处理器并因此由多个块共享是否正确?
cuda - 使用常量内存打印地址而不是 cuda 中的值
我正在尝试在代码中使用常量内存,并从内核分配常量内存值,而不是使用 cudacopytosymbol。
输出显示
我希望程序通过代码中的 kenel 打印分配给常量内存的值。
cuda - CUDA 中的恒定内存大小
在 CUDA 中,当我在常量内存中删除一个数组时,如下所示
大小n
需要是一个常数吗?
我想是的,因为编译器需要知道大小是否n
超过了常量内存大小。是对的吗?