Opencl 重叠传输和执行:确保以正确的顺序执行命令
OpenCL最佳实践指南()在第3.1.3节中建议使用Opencl 重叠传输和执行:确保以正确的顺序执行命令,opencl,gpgpu,Opencl,Gpgpu,OpenCL最佳实践指南()在第3.1.3节中建议使用clFlush,以确保命令按正确的顺序执行,例如,处理不会在数据传输之前执行: 传输队列0的数据 clFlush用于队列0 运行queue0的内核,传输queue1的数据 clFlush用于队列0和队列1 运行queue1的内核并检索queue0的数据 clFlush两个 检索队列1的数据 这里的回答建议使用事件来实现同样的目标 我的问题是:我做对了吗?在这种情况下,clFlush和事件是否都有相同的用途(避免同时执行)?使用哪一个重要吗?c
clFlush
,以确保命令按正确的顺序执行,例如,处理不会在数据传输之前执行:
clFlush
用于队列0clFlush
用于队列0和队列1clFlush
两个我的问题是:我做对了吗?在这种情况下,
clFlush
和事件是否都有相同的用途(避免同时执行)?使用哪一个重要吗?clFlush只确保排队函数将数据传输或内核执行排队,但不确保调用的函数完成。有多种情况需要使用事件:
1-如果对数据传输使用非阻塞调用,则需要使用事件来确保在开始执行内核之前传输完所有数据,并且在复制回主机时,需要等待读取事件完成
2-如果在两个队列中执行的内核之间存在依赖关系,那么您必须再次使用事件以正确的方式对内核进行排序
因此,您的问题取决于内核执行之间的依赖关系,以及是否使用非阻塞调用来传输数据。如果您没有依赖项,并且正在使用阻塞调用进行数据传输,则clFlush将执行此任务。否则,您需要事件