我有两个与OpenCL内核的参数有关的问题。如果我在描述我的问题的背景下出错了,请纠正我。
标量参数(例如,内核foo(int a))被放置在私有地址空间中(就像所有内核参数一样,无论它们是否是标量)。不需要__private关键字;默认情况下,参数放在私有地址空间中。 Q1:谁负责将标量放在GPU专用地址空间?对于标量,不需要显式传输操作(从CPU到GPU地址空间)。这是为什么? Q2:我可以将标量作为参数输出吗?我希望在其他数组中获得内核计算中的一个值。
答案 0 :(得分:1)
Q1:OpenCL运行时负责处理你的内核参数。
Q2:不。你必须写入缓冲区或图像。如果您想从内核的整个执行中获得单个值,请将其视为减少。您的内核可能会在一定数量的处理单元上同时运行,并且这些实例可能无法以任何特定顺序执行。如果您的内核存储单个值,则内核的每个实例将每个存储一个值。每个实例都应该有自己的位置来存储值,这样就不会覆盖另一个实例。