Intel SSE4.2
的指令数量是313个(将Intel手册编号相加)。我希望AVX
和AVX2
的指令数量也是这个数字,但是找不到可信的参考资料。我发现一篇文章说AVX
有292个指令(第一页,表格1),但是这是错误的,因为SSE4.2包含了SSSE3指令,而他们没有计算在内。所以我应该如何计算AVX/AVX2
的指令数量?
(我想写一个程序,将Intel内部函数指南复制到文本文件中并进行处理。但我需要更简单的方法。)AVX
指令共有86个,AVX2
指令共有137个,AVX
和AVX2
总共引入了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。
vmovss
,MOVSS(_mm_move_ss
)的AVX版本。我猜你的方法只会计算AVX中具有新内部函数的指令,例如256b版本,而不仅仅是3操作数版本。@CodyGray说得很好。 - Peter Cordesvmovss
的内在指令,并且我的方法没有计算它。 - ADMS这个资源也提供了对这个问题的答案:
Intel AVX是一个全面的ISA增强,除了紧凑的新编码格式外,还添加了新功能。
• 大量(200+)的传统Intel SSEx指令通过增强的指令编码进行升级,以利用新功能,如独立源操作数和灵活的内存对齐。
• 适度数量(<100)的128位传统Intel SSEx指令已经被提升以处理256位向量数据。
• 在2010年及以后推出的Intel处理器中,添加了一些新的数据处理和算术操作(<100),这些操作在传统的Intel SSEx中不存在。
SSE
引入了70个新指令(mmx有57个指令),SSE2
--->144,SSE3
--->13,SSSE3
---->32,SSE4
---->54。所以,AVX
---->?和AVX2
----->? - AmiriAVX
或AVX2
。正在做研究,以便发表一篇文章。 - Amiri