我正在将一个 CUDA 应用程序(如果你必须知道的话)翻译成 OpenCL。原始应用程序使用 C 风格的 CUDA API,使用单个流只是为了避免在读取结果时自动忙等待。
现在我注意到 OpenCL 命令队列看起来很像 CUDA 流。但是在设备读取命令中,同样在写入和内核执行命令中,我也注意到事件的参数。所以我想知道,按顺序执行设备写入、多个内核(例如,一次调用一个内核,然后调用 100 次调用另一个内核)和读取设备需要什么?
- 如果我只是将它们按顺序排入同一个队列,它们会像在 CUDA 中那样按顺序执行吗?
- 如果这不起作用,我可以/应该菊花链事件,使每个呼叫的等待列表成为前一个呼叫的事件吗?
- 或者我应该将所有以前的事件添加到每个呼叫的等待列表中,比如是否有 N^2 搜索依赖项或其他什么?
- 还是我只需要为每个调用单独调用 event.wait(),就像AMD 教程中所说的那样?
谢谢!