自宣布
高级性能扩展(APX)
和
AVX10
早在7月份,英特尔的开源编译器工程师就一直忙于准备GCC和LLVM/Clang编译器工具链,以便在未来的英特尔处理器中找到这些主要的CPU扩展。
有
初始AVX10.1支持
添加到GNU编译器集合(GCC)中,
GNU汇编程序准备
,等等。最近几天,英特尔编译器工程师也发布了更多的补丁。
上周四看到
-用于AVX-512的mevex512
已发送的修补程序和相关修补程序
-mno-evex512
用于切换512位寄存器和64位掩码寄存器。
经过前面的讨论,我们将首先[引入]选项-m[no-]evex512,而不是支持选项-mavx10.1,它将启用/禁用512位寄存器和64位掩码寄存器。
它不会改变当前选项的行为,因为如果AVX512F在没有指定evex512选项的情况下启用,它将自动启用512位寄存器和64位掩码寄存器。
补丁的运行方式如下:
补丁1增加了对选项-mevex512的初始支持。
补丁2-6完善了当前的intrin文件,为所有512位intrin推送evx512目标。那些标量内部函数保持不变。
修补程序7-11为所有相关内置程序添加了OPTION_MASK_ISA2_EVEX512。
修补程序12禁用了zmm寄存器,512位libmvec对no-evex512的调用,在使用512位寄存器时也请求eve512进行矢量化。
修补程序13-17在相关模式中支持evex512。
补丁18为-mno-evex512添加了测试用例,并允许使用它。
修补程序当前导致pr89229的扫描asm失败-{5,6,7}b.c因为我们将在这里发出标量vmovss。当尝试使用x/ymm 16+w/o avx512vl,但使用avx512f+evex512时,我想我们可以发出标量或zmm指令。这在硬件上是非常罕见的情况,因为没有硬件w/o avx512vl,但有avx512f,所以我不想在这里增加[维护]工作,以获得稍微的性能改进。但它可以改变为以前的行为。
准备过程中单独更新的修补程序
APX-EGPR
周五发布了支持消息。如先前针对GCC的APX EGPR补丁中所述:
“英特尔高级性能扩展(APX)已经发布。它包含几个扩展,如扩展的16个通用寄存器(EGPR)…APX引入了REX2前缀,以帮助表示几个遗留/SSE指令的EGPR。对于剩下的一些,它使用evex前缀来推广EGPR。APX中的主要问题是并非所有遗留/sse/vex指令都支持EGPR。例如,传统操作码map2/3中的指令不能使用REX2前缀,因为REX2中只有1位指示map0/1指令,例如pinsrd。此外,对于大多数向量扩展,EGPR在其evex形式中受支持,但在vex形式中不受支持,这意味着没有evex形式的助记符也不能使用EGPR,例如vphaddw。这种限制给目前的海湾合作委员会基础设施带来了一些挑战。。。。“
因此,有了针对GCC的APX EGPR修补程序,就可以处理遗留指令、初始APX_F启用代码,以及为“英特尔高级性能扩展”做准备的其他早期工作。
The APX and AVX10.2+ efforts are a big undertaking but at least Intel's open-source/Linux engineers have been very active on pushing out new patches quickly and getting relevant bits upstreamed, so that by the time processors appear with these capabilities there should be nice out-of-the-box Linux support.