【发布时间】:2013-01-29 05:23:20
【问题描述】:
我正在寻找一种优雅的方式来在 CUDA 内核中传递多个重复的参数,
众所周知,每个内核参数都位于每个 CUDA 线程的堆栈上,因此,内核传递给每个线程的参数之间可能存在重复,即位于每个堆栈上的内存。
为了尽量减少传递的重复参数的数量,我正在寻找一种优雅的方法。
为了解释我的担忧:假设我的代码如下所示:
kernelFunction<<<gridSize,blockSize>>>(UINT imageWidth, UINT imageWidth, UINT imageStride, UINT numberOfElements,x,y,ect...)
UINT imageWidth、UINT imageWidth、UINT imageStride、UINT numberOfElements 参数位于每个线程库中,
我正在寻找一种技巧来发送更少的参数并从其他来源访问数据。
我正在考虑使用常量内存,但由于常量内存位于 global 上,所以我放弃了它。不用说内存位置应该很快。
【问题讨论】:
-
"众所周知,每个内核参数都位于每个 CUDA 线程的堆栈上" - 我们根本不知道,因为内核参数要么存储在块范围共享内存中(计算1.x)或上下文范围常量内存(计算 2.x、3.x)。这个问题的整个前提都是错误的。
标签: performance cuda gpu gpgpu