我正在参考intel_gen8_arch,但是SIMD引擎的概念让我有些困惑。
5.3.2 SIMD FPUs 在每个执行单元(EU)中,主要的计算单元是一对SIMD浮点数单位(FPU)。虽然称为FPU,但它们支持浮点和整数计算。这些单位可以SIMD执行最多四个32位浮点(或整数)操作,或者SIMD执行最多八个16位整数或16位浮点操作。每个SIMD FPU可以在每个周期内完成同时加法和乘法(MAD)浮点指令。因此,每个EU每个周期可以进行16个32位浮点操作:(加法+乘法) x 2个FPUs x SIMD-4。
上述文档清楚地说明了每个执行单元上可以执行的最大浮点操作。
第一个疑问: 我认为它是指每个执行单元的硬件线程,而不是整个执行单元。
在5.3.5节中提到 在Gen8计算架构中,大多数SPMD编程模型采用这种样式的代码生成和EU处理器执行。实际上,每个SPMD内核实例似乎在其自己的SIMD通道中串行和独立地执行。实际上,每个线程并发地执行SIMD-Width数量的内核实例。因此,对于计算内核的SIMD-16编译,可以在单个EU上同时执行SIMD-16 x 7个线程= 112个内核实例。类似地,对于计算内核的SIMD-32编译,32 x 7个线程= 224个内核实例可以在单个EU上同时执行。
现在这部分的说明似乎与5.3.2节相矛盾。
具体来说, 1)由于它说每个EU的硬件线程有2个SIMD-4单位,那么如何使用SIMD-16。我们如何在7个线程上达到224的计算量。
另外,我们如何以SIMD-16或SIMD-32模式编译内核?
5.3.2 SIMD FPUs 在每个执行单元(EU)中,主要的计算单元是一对SIMD浮点数单位(FPU)。虽然称为FPU,但它们支持浮点和整数计算。这些单位可以SIMD执行最多四个32位浮点(或整数)操作,或者SIMD执行最多八个16位整数或16位浮点操作。每个SIMD FPU可以在每个周期内完成同时加法和乘法(MAD)浮点指令。因此,每个EU每个周期可以进行16个32位浮点操作:(加法+乘法) x 2个FPUs x SIMD-4。
上述文档清楚地说明了每个执行单元上可以执行的最大浮点操作。
第一个疑问: 我认为它是指每个执行单元的硬件线程,而不是整个执行单元。
在5.3.5节中提到 在Gen8计算架构中,大多数SPMD编程模型采用这种样式的代码生成和EU处理器执行。实际上,每个SPMD内核实例似乎在其自己的SIMD通道中串行和独立地执行。实际上,每个线程并发地执行SIMD-Width数量的内核实例。因此,对于计算内核的SIMD-16编译,可以在单个EU上同时执行SIMD-16 x 7个线程= 112个内核实例。类似地,对于计算内核的SIMD-32编译,32 x 7个线程= 224个内核实例可以在单个EU上同时执行。
现在这部分的说明似乎与5.3.2节相矛盾。
具体来说, 1)由于它说每个EU的硬件线程有2个SIMD-4单位,那么如何使用SIMD-16。我们如何在7个线程上达到224的计算量。
另外,我们如何以SIMD-16或SIMD-32模式编译内核?