Opencl 使用CL_MEM_READ_WRITE和CL_MEM_READ标志创建的内存的读取速度之间的差异

Opencl 使用CL_MEM_READ_WRITE和CL_MEM_READ标志创建的内存的读取速度之间的差异,opencl,Opencl,在第一阶段的项目中,我生成了一些顶点,然后在第二阶段我读取这些顶点,然后创建连通性数组。对于顶点,我使用了CL_MEM_READ_WRITE。我想知道,如果我在第一阶段使用CLU写内存,然后在第二阶段的另一个CLU读内存中复制它,我的性能会得到提高吗?因为它们可能都有自己的优化以获得最大性能。可能没有。我预计缓冲区拷贝比任何优化都要昂贵得多 另外,我查看了AMD应用程序OpenCL编程指南,没有发现任何关于使用只读或只写缓冲区时优化的迹象 我的理解是,访问标志仅由OpenCL运行时用于决定何时需

在第一阶段的项目中,我生成了一些顶点,然后在第二阶段我读取这些顶点,然后创建连通性数组。对于顶点,我使用了CL_MEM_READ_WRITE。我想知道,如果我在第一阶段使用CLU写内存,然后在第二阶段的另一个CLU读内存中复制它,我的性能会得到提高吗?因为它们可能都有自己的优化以获得最大性能。

可能没有。我预计缓冲区拷贝比任何优化都要昂贵得多

另外,我查看了AMD应用程序OpenCL编程指南,没有发现任何关于使用只读或只写缓冲区时优化的迹象


我的理解是,访问标志仅由OpenCL运行时用于决定何时需要在不同内存空间/区域之间复制缓冲区数据。

可能不是。我预计缓冲区拷贝比任何优化都要昂贵得多

另外,我查看了AMD应用程序OpenCL编程指南,没有发现任何关于使用只读或只写缓冲区时优化的迹象


我的理解是,访问标志仅由OpenCL运行时用于决定何时需要在不同内存空间/区域之间复制缓冲区数据。

在CL_CREATEBUFER的第二个参数中传递的标志仅指定内核端如何访问内存空间

在CL_CREATEBUFER的第二个参数中传递的标志只指定内核端如何访问内存空间

但无论如何,这是一个很好的尝试,因为我在DirectX11中体验到了只读和读写内存之间的巨大差异。另外,我认为它类似于opengl的静态/动态模式,静态模式比动态模式快得多。只有当您有2或3个GPU处理相同的数据时,您才会看到好处。OpenCL可以利用这些知识不触发设备之间的内存一致性复制,从而提高总体速度。但这并不适用于单个GPU的情况。但无论如何,尝试一下是很好的,因为我在directx 11中体验到了只读和读写内存之间的巨大差异。另外,我认为它类似于opengl的静态/动态模式,静态模式比动态模式快得多。只有当您有2或3个GPU处理相同的数据时,您才会看到好处。OpenCL可以利用这些知识不触发设备之间的内存一致性复制,从而提高总体速度。但这并不适用于单个GPU的情况。