如何计算AVX和AVX2指令集的数量

3
Intel SSE4.2的指令数量是313个(将Intel手册编号相加)。我希望AVXAVX2的指令数量也是这个数字,但是找不到可信的参考资料。我发现一篇文章AVX有292个指令(第一页,表格1),但是这是错误的,因为SSE4.2包含了SSSE3指令,而他们没有计算在内。所以我应该如何计算AVX/AVX2的指令数量? (我想写一个程序,将Intel内部函数指南复制到文本文件中并进行处理。但我需要更简单的方法。)

1
你想要计算助记符的数量还是操作码的数量?即使在AVX2中仍然只有128b版本,你是否想将VPCMPISTRI与PCMPISTRI分开计算? - Peter Cordes
1
您想将所有不同形式的FMA(如VFMADD132PS vs. VFMADD213PS vs. VFMADDSUB231PS)都视为单独的指令进行计数吗?基本上,您想要使用这个数字做什么,以及您想让它表示什么? - Peter Cordes
1
@PeterCordes 是的,我想要第一条评论和第二条评论分开,并且想要助记符。不只是想要新指令。例如,SSE引入了70个新指令(mmx有57个指令),SSE2--->144,SSE3--->13,SSSE3---->32,SSE4---->54。所以,AVX---->?和AVX2----->? - Amiri
我想比较一下过去的英特尔SIMD技术和AVXAVX2。正在做研究,以便发表一篇文章。 - Amiri
2
有脚本可以解析英特尔的PDF指令集参考手册:http://github.com/zneak/x86doc - Peter Cordes
2个回答

5
AVX指令共有86个,AVX2指令共有137个,AVXAVX2总共引入了223个新指令。 已将英特尔内部函数指南复制到Word文件中,删除了函数指令,对汇编指令进行了排序并删除了重复指令。 这假设所有指令都有相应的内部函数。以下是AVX指令列表: vaddpd、vaddps、vaddsubpd、vaddsubps、vandnpd、vandnps、vandpd、vandps、vblendpd、vblendps、vblendvpd、vblendvps、vbroadcastf128、vbroadcastsd、vbroadcastss、vcmppd、vcmpps、vcmpsd、vcmpss、vcvtdq2pd、vcvtdq2ps、vcvtpd2dq、vcvtpd2ps、vcvtps2dq、vcvtps2pd、vcvttpd2dq、vcvttps2dq、vdivpd、vdivps、vdpps、vextractf128、vhaddpd、vhaddps、vhsubpd、vhsubps、vinsertf128、vlddqu、vmaskmovpd、vmaskmovps、vmaxpd、vmaxps、vminpd、vminps、vmovapd、vmovaps、vmovddup、vmovdqa、vmovdqu、vmovmskpd、vmovmskps、vmovntdq、vmovntpd、vmovntps、vmovshdup、vmovsldup、vmovupd、vmovups、vmulpd、vmulps、vorpd、vorps、vperm2f128、vpermilpd、vpermilps、vptest、vpxor、vrcpps、vroundpd、vroundps、vrsqrtps、vshufpd、vshufps、vsqrtpd、vsqrtps、vsubpd、vsubps、vtestpd、vtestps、vunpckhpd、vunpckhps、vunpcklpd、vunpcklps、vxorpd、vxorps、vzeroall、vzeroupper。

并且 AVX2 插入指令: movddup, vbroadcasti128, vextracti128, vgatherdpd, vgatherdps, vgatherqpd, vgatherqps, vinserti128, vmovntdqa, vmpsadbw, vpabsb, vpabsd, vpabsw, vpackssdw, vpacksswb, vpackusdw, vpackuswb, vpaddb, vpaddd, vpaddq, vpaddsb, vpaddsw, vpaddusb, vpaddusw, vpaddw, vpalignr, vpand, vpandn, vpavgb, vpavgw, vpblendd, vpblendvb, vpblendw, vpbroadcastb, vpbroadcastd, vpbroadcastq, vpbroadcastw, vpcmpeqb, vpcmpeqd, vpcmpeqq, vpcmpeqw, vpcmpgtb, vpcmpgtd, vpcmpgtq, vpcmpgtw, vperm2i128, vpermd, vpermpd, vpermps, vpermq, vpgatherdd, vpgatherdq, vpgatherqd, vpgatherqq, vphaddd, vphaddsw, vphaddw, vphsubd, vphsubsw, vphsubw, vpmaddubsw, vpmaddwd, vpmaskmovd, vpmaskmovq, vpmaxsb, vpmaxsd, vpmaxsw, vpmaxub, vpmaxud, vpmaxuw, vpminsb, vpminsd, vpminsw, vpminub, vpminud, vpminuw, vpmovmskb, vpmovsxbd, vpmovsxbq, vpmovsxbw, vpmovsxdq, vpmovsxwd, vpmovsxwq, vpmovzxbd, vpmovzxbq, vpmovzxbw, vpmovzxdq, vpmovzxwd, vpmovzxwq, vpmuldq, vpmulhrsw, vpmulhuw, vpmulhw, vpmulld, vpmullw, vpmuludq, vpor, vpsadbw, vpshufb, vpshufd, vpshufhw, vpshuflw, vpsignb, vpsignd, vpsignw, vpslld, vpslldq, vpsllq, vpsllvd, vpsllvq, vpsllw, vpsrad, vpsravd, vpsraw, vpsrld, vpsrldq, vpsrlq, vpsrlvd, vpsrlvq, vpsrlw, vpsubb, vpsubd, vpsubq, vpsubsb, vpsubsw, vpsubusb, vpsubusw, vpsubw, vpunpckhbw, vpunpckhdq, vpunpckhqdq, vpunpckhwd, vpunpcklbw, vpunpckldq, vpunpcklqdq, vpunpcklwd, vpxor。


1
这假设所有指令都有相应的内在函数。 - Cody Gray
1
我在你的列表中没有看到vmovssMOVSS(_mm_move_ss)的AVX版本。我猜你的方法只会计算AVX中具有新内部函数的指令,例如256b版本,而不仅仅是3操作数版本。@CodyGray说得很好。 - Peter Cordes
这可能是或可能不是OP想要的。由于存在语言障碍,因此仍然不是完全清楚的。 - Peter Cordes
是的,你说得对,在英特尔指令集手册中没有关于vmovss的内在指令,并且我的方法没有计算它。 - ADMS
@PeterCordes 我在哪里可以找到那些指令组织来提高我的答案? - ADMS
英特尔指令集手册(x86手册第2卷)。在x86标签wiki中链接到PDF,或查看其中一个HTML摘录,例如FelixCloutier的。实际上,这提醒我:将Intel的PDF转换为可解析格式的脚本是开源的:https://github.com/zneak/x86doc - Peter Cordes

1

这个资源也提供了对这个问题的答案:

Intel AVX是一个全面的ISA增强,除了紧凑的新编码格式外,还添加了新功能。

• 大量(200+)的传统Intel SSEx指令通过增强的指令编码进行升级,以利用新功能,如独立源操作数和灵活的内存对齐。

• 适度数量(<100)的128位传统Intel SSEx指令已经被提升以处理256位向量数据。

• 在2010年及以后推出的Intel处理器中,添加了一些新的数据处理和算术操作(<100),这些操作在传统的Intel SSEx中不存在。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接