我想在openCL中实现一个算法,需要多次在 3D 灰度图像上应用某个变换。我的内核有输入和输出图像。现在我想简单地交换输入和输出图像并再次应用内核。但是,一个图像是使用read_only创建的,另一个是使用write_only创建的。这是否意味着我必须使用常规缓冲区,或者是否有一些技巧,如何翻转这两个图像,而不先将它们从设备复制回主机并再次返回设备?
答案 0 :(得分:3)
你说:“但是,一个图像是用read_only创建的,另一个是用write_only创建的”。显而易见的答案是:不要这样做,你会没事的。
不太明显的潜台词是:使用writeonly / readonly标志创建图像(通过angular.equals({b : { c : [1, 2]}, a : 'a'}, {a : 'a', b : { c : [1, 2]}})
在主机端完成)和内部访问类型之间存在差异特定内核(在内核的参数定义中使用clCreateImage(...,CL_MEM_WRITE_ONLY/CL_MEM_READ_ONLY)
/ __read_only
限定符指定。)
除非我完全弄错,否则您可以安全地创建没有限制的图像(即__write_only
),然后将其用作内核的输入参数,并在下次内核运行时将其用作输出参数。在单个内核运行期间,您无法混合读/写访问。