opencl:使用_local时分配了多少共享变量

opencl:使用_local时分配了多少共享变量,opencl,Opencl,假设我们已将其声明为内核参数: __local float *sharedData 我们假设工作组的规模是512。那么将分配多少份这样的sharedData副本?512 ? 或者只有一个副本,并将广播到所有线程 内核中的其他变量呢。我的理解是,内核体中的所有变量都将在“n”个时间内重复,其中“n”是工作组中的线程数 是的,本地数组对工作组中的所有工作项都可见(可以说是广播)。无论工作组大小如何,每个工作组都将有一个副本 如果您的工作组是512个工作项,并且希望每个工作项有一个浮动,那么sh

假设我们已将其声明为内核参数:

__local float *sharedData  
我们假设工作组的规模是512。那么将分配多少份这样的sharedData副本?512 ? 或者只有一个副本,并将广播到所有线程


内核中的其他变量呢。我的理解是,内核体中的所有变量都将在“n”个时间内重复,其中“n”是工作组中的线程数

是的,本地数组对工作组中的所有工作项都可见(可以说是广播)。无论工作组大小如何,每个工作组都将有一个副本

如果您的工作组是512个工作项,并且希望每个工作项有一个浮动,那么
sharedData
将有512个元素,您可以通过指定此大小

正如DarkZeros所说,私有变量特定于每个工作项。512个工作项中的每一个都有自己的副本


(注意:我认为您所称的线程就是我们所称的工作项。)

局部变量在每个工作组中存在一次。默认(私有)变量在每个工作项中存在一次。@暗零表示共享内存中只有一个值,所有线程都将读取该值(通过广播?)@user3891236线程是独立的,独立运行。而Workitem是OpenCL特有的术语,指的是工作组中的小部分。它们不是线程,因为它们不是独立的,所以它们都使用不同的数据运行相同的代码。@DarkZeros感谢您提供的信息。你能给我指出一些支持你观点的参考资料吗(特别是工作项不是独立的)?我认为“线程”来自CUDA的Nomanclarity,而不是OpenCL。请参阅此参考资料:另请参阅本演示文稿的幻灯片26:以获取映射到OpenCL的CUDA概念表。