我目前有一个通过读取处理全局缓冲区的内核 进入本地记忆并进行计算。现在,我想使用寄存器 而不是本地的记忆。如何转换为寄存器?
谢谢!
编辑:项目可以在这里找到:
答案 0 :(得分:2)
如果没有看到某些代码,就不可能提供比已经提供的指导更多的指导,但我会尝试详细说明这些意见。
声明没有__local
或__global
的任何变量都是私有的,因此如果删除修饰符,则只有运行工作项的单个处理元素才能看到内存。这可能会存储在寄存器中,但只有在有可用的寄存器空间时才会发生。编译器已经代表您将一些值放入寄存器中,即使您没有要求它这样做。例如,如果您在NVIDIA平台上运行并在构建内核时传递-cl-nv-verbose
标志,则可以看到此证据。您将看到如下输出:
ptxas info : Compiling entry function 'monte' for 'sm_35'
ptxas info : Function properties for monte
0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info : Used 61 registers, 360 bytes cmem[0], 96 bytes cmem[2]
表示正在使用61个寄存器。
然而,正如@DarkZeros所指出的,从本地内存迁移到私有内存的决定更多地是关于变量的范围。如果您的算法依赖于计算单元的所有成员都可以访问变量的同一副本,那么它就不再起作用了。