OpenCL get_local_id速度/寄存器中的成本

时间:2013-11-26 11:20:24

标签: opencl

在OpenCL内核中,多次调用get_local_id(0)比较慢,而不是在顶部调用一次 - 然后从局部变量访问该值?

我是否通过不将get_local_id(0)存储到本地变量,而是多次调用它来使用少一个寄存器?

1 个答案:

答案 0 :(得分:3)

在大多数GPU架构中,本地工作项ID将保存在一组特殊的寄存器中,这些寄存器由硬件在调度线程时设置。这意味着当你执行get_local_id(0)时,你实际上只是从寄存器中读取,即没有速度丢失'调用'get_local_id(0)。

如果将get_local_id(0)分配给变量以供后续使用,编译器注意,并生成与每次get_local_id(0)相同的代码。但是,根据我的经验,情况并非总是如此,您会注意到通过不使用变量来存储本地ID,只保存了一个寄存器。

如果您对寄存器很紧张,我建议每次都调用get_local_id(0)。您甚至可以设置一个宏来隐藏是否正在调用get_local_id(0)或正在使用寄存器。如果你有备用的寄存器(你的探查器会告诉你)或者更喜欢使用变量的代码,那么请使用变量。