如何在英特尔 FPGA 上安排 OpenCL 工作组?
How are OpenCL work-group scheduled on Intel FPGA?
我对英特尔 FPGA 中多个 CU 上的工作组调度有疑问。当工作组分配给可用的 CU 时,CU 何时被视为可用?是在前一个工作组的最后一个工作项放弃管道时还是在它处于第二阶段时(因此管道的每个阶段都被前一个工作组占用,除了第一个)?这个决定是由硬件调度程序做出的,但我还没有找到任何 public 文档来解释这些。
编辑:我说的是使用面向 FPGA 的英特尔 OpenCL SDK 时发生的自动过程,而不是使用 HDL 的自定义设计。
除了工作项之外,工作组也在每个 CU 中流水线化。因此,您同时在同一个 CU 中有多个运行中的工作组,以最大限度地提高流水线效率。如果您的设计使用基于本地内存的缓冲区,当您检查 HTML 报告时,您将看到编译器正在进一步复制这些缓冲区以支持特定数量的 "Simultaneous Work-groups"。此类工作组的数量似乎等于每个 CU 的流水线深度除以工作组大小。最后,来自同一 CU 中所有工作组 运行 的所有工作项一个接一个地流水线化,属于每个 CU 的工作项使用它们自己的本地缓冲区,并且每个工作都强制执行屏障同步-团体。每个 CU 将安排一个新的工作组,可能是在同时 运行 个工作组之一完全离开 CU 之后。
P.S。在他们自己的论坛中获得与面向 OpenCL 的英特尔 FPGA SDK 相关的帮助可能更容易。
P.P.S。 Intel 的 OpenCL 工作项调度程序的详细信息未在任何地方记录。
我对英特尔 FPGA 中多个 CU 上的工作组调度有疑问。当工作组分配给可用的 CU 时,CU 何时被视为可用?是在前一个工作组的最后一个工作项放弃管道时还是在它处于第二阶段时(因此管道的每个阶段都被前一个工作组占用,除了第一个)?这个决定是由硬件调度程序做出的,但我还没有找到任何 public 文档来解释这些。
编辑:我说的是使用面向 FPGA 的英特尔 OpenCL SDK 时发生的自动过程,而不是使用 HDL 的自定义设计。
除了工作项之外,工作组也在每个 CU 中流水线化。因此,您同时在同一个 CU 中有多个运行中的工作组,以最大限度地提高流水线效率。如果您的设计使用基于本地内存的缓冲区,当您检查 HTML 报告时,您将看到编译器正在进一步复制这些缓冲区以支持特定数量的 "Simultaneous Work-groups"。此类工作组的数量似乎等于每个 CU 的流水线深度除以工作组大小。最后,来自同一 CU 中所有工作组 运行 的所有工作项一个接一个地流水线化,属于每个 CU 的工作项使用它们自己的本地缓冲区,并且每个工作都强制执行屏障同步-团体。每个 CU 将安排一个新的工作组,可能是在同时 运行 个工作组之一完全离开 CU 之后。
P.S。在他们自己的论坛中获得与面向 OpenCL 的英特尔 FPGA SDK 相关的帮助可能更容易。
P.P.S。 Intel 的 OpenCL 工作项调度程序的详细信息未在任何地方记录。