Memory 本地内存,我假设的概念正确吗?

Memory 本地内存,我假设的概念正确吗?,memory,opencl,gpu,local,Memory,Opencl,Gpu,Local,我使用的是HD5770,它有10个计算单元和32k的本地内存 我的全局大小是256*256, 我本地的尺码是256码 每个工作组都需要使用1k的本地内存,我这样指定: clSetKernelArg(predicate, param++, 1024, NULL); __local float localBuffer[1024]; 首先:这是分配本地内存的正确方法,还是在设置内核参数时,我必须指定所有工作组一起使用的缓冲区的整个大小,然后根据本地id将其索引到此缓冲区中 秒:一个工作组是否只在一

我使用的是HD5770,它有10个计算单元和32k的本地内存

我的全局大小是256*256,
我本地的尺码是256码

每个工作组都需要使用1k的本地内存,我这样指定:

clSetKernelArg(predicate, param++, 1024, NULL);
__local float localBuffer[1024];
首先:这是分配本地内存的正确方法,还是在设置内核参数时,我必须指定所有工作组一起使用的缓冲区的整个大小,然后根据本地id将其索引到此缓冲区中

秒:一个工作组是否只在一个计算单元上执行

第三:工作组完成后内存是否会被释放?(如果每个工作组使用1k,则32k不足以容纳256个工作组)

或者以更一般的方式:调度器是否会考虑并行调度不超过32个工作组

谢谢大家!

1)这是分配1024字节未初始化本地内存的方式,因此如果这是您想要的,那么是的,您做得对。您还可以这样定义内核内部的内存:

clSetKernelArg(predicate, param++, 1024, NULL);
__local float localBuffer[1024];
2) 这是实现定义的,所以没有办法知道,也不能假设。一般来说,一个工作组是在一个以上的计算单元上执行的,但正如我所说的,你永远不会真正知道

3) 下次使用内存时,它将被覆盖,因此您不必担心释放它,特别是因为它未初始化,并且您没有传递一些缓冲区


希望这有帮助

感谢您的回复,但我如何知道有多少工作组同时处于活动状态?在这种情况下,不允许同时执行超过32个scenario@user984308从理论上讲,没有办法知道两个工作组可以彼此独立运行。OpenCL标准没有指定如何将执行模型映射到硬件上。