Egen NEON后端是否经过优化以利用从ARM A76开始存在的2x128b NEON执行单元?

Egen NEON后端是否经过优化以利用从ARM A76开始存在的2x128b NEON执行单元?,arm,eigen,simd,neon,Arm,Eigen,Simd,Neon,回顾Eigen文档,不清楚它是否在A76 CPU核心发布后进行了更新,以利用其包含的更广泛的SIMD(2x128b与以前的128b相比) 我希望开发团队的人(或专家用户)能帮助澄清这一点。我对Eigen不太熟悉,但一般来说,利用不同数量的硬件执行单元不需要对SIMD代码做太多工作,尤其是当CPU支持无序执行时,当有更多的执行单元时,它们将获取更多可以并行执行的指令 如果使用编译器编译SIMD Intrinsic等,如果要求编译器专门针对该内核进行优化(并且编译器知道该内核的调度特征),则编译器可

回顾Eigen文档,不清楚它是否在A76 CPU核心发布后进行了更新,以利用其包含的更广泛的SIMD(2x128b与以前的128b相比)
我希望开发团队的人(或专家用户)能帮助澄清这一点。

我对Eigen不太熟悉,但一般来说,利用不同数量的硬件执行单元不需要对SIMD代码做太多工作,尤其是当CPU支持无序执行时,当有更多的执行单元时,它们将获取更多可以并行执行的指令

如果使用编译器编译SIMD Intrinsic等,如果要求编译器专门针对该内核进行优化(并且编译器知道该内核的调度特征),则编译器可能能够调整代码的精确调度。对于手写汇编代码也是一样——它可以根据不同内核的特性进行微调,但在大多数情况下,变化不大;能力更强的内核将更快地执行它


(主要影响代码编写的整体情况的因素通常是指令集中可用的寄存器数量,这需要进行适当的重写才能充分利用,但这不会随着具有更多执行单元的硬件实现而改变。)

我不知道答案(仅在AMD64中使用了Eigen),但我想我知道如何找到。AFAIK Eigen不使用汇编。这意味着它们发出手动矢量化代码的唯一方式是内部函数。在arm.com上的NEON文档中,找到处理256位长向量的乘法或FMA内部函数,然后“在文件中查找”在Eigen的文件夹中,搜索该内在特性。NEON开发者不使用术语“FMA”,它被称为MLA,表示乘法+累加。这通常是正确的,尽管有时您可能需要一种具有更好计算强度的完全不同的策略,以实际利用更宽的内核。(例如,如果一个算法通常每个加载和存储只执行1个FMA,那么即使有2个FMA单元,如果没有更多的加载和存储单元,也只会对加载/存储执行单元吞吐量造成瓶颈。)然而,如果可能的话,我希望Eigen具有更好的计算强度,因为现在大多数x86-64 CPU都有2个FMA、2个load和1个store执行单元。