Intel® FPGA SDK for OpenCL™ Pro Edition: 最佳实践实践指南

ID 683521
日期 9/26/2022
Public
文档目录

11.1. 多线程主机应用程序

存在并行、独立的数据路径并且主机必须处理内核执行之间的数据时,请考虑使用多线程主机应用程序。

下图说明单线程主机应用程序如何处理内核执行之间的并行、独立数据路径:

图 90. 单线程主机应用程序的内核执行

OpenCL运行时线程安全并支持多线程应用程序。因此,您可以在主机上以并行线程执行工作任务,同时仍然允许这些线程以线程安全的方式访问OpenCL API。

然而,通过在调用任何OpenCL主机API后立刻同步线程,可以在OpenCL API边界强制执行线程安全,这就意味着只有一个线程在运行时处于有效状态,而其他线程等待。因此,如果队列上的一个线程调用clFlinish充满工作,那么另一个线程调用clSetKernelArg可能必须等到所有工作完成才能执行。

如果可能,请在多线程CPU上处理数据,并使用单个专用线程与OpenCL API交互。

下图说明多线程主机应用程序如何处理内核执行之间的并行、独立数据路径:

图 91. 多线程主机应用程序在线程安全运行时环境中的内核执行