作者:275514908_9369d7 | 来源:互联网 | 2022-12-01 11:03
哪里可以找到有关x86微体系结构"市场份额"的数据?x86系列CPU的用户有多少百分比拥有支持SSE4.2,AVX,AVX2等的CPU?
我正在为我的程序分发预编译的二进制文件,我想知道什么是最佳的优化目标,以及在没有运行时检查的情况下可以合理使用哪些SIMD扩展.
我可以找到整体的英特尔与AMD市场份额数据,但不是几代英特尔和AMD的CPU细分.理想情况下,我也希望按操作系统和每个国家/地区进行细分,但即使是微体系结构的全局统计数据也会比没有更好.
1> Peter Cordes..:
如果没有回退或安装时检测,如果没有运行时检查,任何比SSE2(x86-64的基线)更新的东西都是有风险的.
AVX和BMI1/2很遗憾地远离基线,因为英特尔仍在销售Celeron/Pentium芯片,禁用VEX前缀解码(大概是为了利用具有256位执行单元缺陷的硅),但SSE4.2正在获得更接近,SSSE3是可能的.如果不支持SSSE3指令,请参阅最新处理器?和Mac OSX minumum支持sse版本
所有64位intel架构是否都支持SSSE3/SSE4.1/SSE4.2指令?有一个指向Steam客户的Valve Hardware Survey的链接(目前显示SSE3为~100%安装基础,但SSSE3仅为97%),因此如果您要发送的PC游戏应与目标受众相关联.但是,对于某些条目,故障有点奇怪.像fcmov
组(x87网点有条件移动)被报告为已完成的下降至97.5%,但每P6兼容CPU有它.您将找不到具有SSE2但没有FCMOV的CPU.也许较新版本的Steam没有测试它.也许旧版本的Steam没有测试CMPXCHG16B?所以带上一粒盐,但他们可能对SSE2/3/SSSE3/SSE4.x和AVX非常敏感.
对于服务器的东西,您可以轻松地设置SSE4.2最小值.Atom/Silvermont支持它,AMD和VIA的低功耗架构也是如此,因此节能服务器可以运行它.古代主流CPU在个人家庭服务器使用之外的服务器上并不常用,因为它们通常比运行温度更低的更便宜的现代机器慢.
(Silvermont不太可能很快支持AVX,甚至更少AVX2或FMA.)
你不需要有自己限制在一个单一的二进制. 您甚至可以让人们在下载时选择,或者安装人员可以在安装时选择.
或者你可以有一个运行时包装器来选择可执行文件和动态库,这样你就可以有效地获得运行时调度,同时仍然能够编译gcc -O3 -march=haswell
或者让编译器在整个地方使用新的指令集(特别是对于BMI1/BMI2用于有效的单uop可变计数移位).
另一种选择是动态链接的技巧,无论是在整个库基础上或在每个函数的像glibc的使用来解决memcpy
来__memset_avx2_unaligned_erms
. perf报告显示此函数"__memset_avx2_unaligned_erms"有开销.这是否意味着内存未对齐?
所有这些(除了每个函数的动态链接器技巧)比在运行时使代码知道指令集扩展更容易,并且没有性能开销.(除非你把东西放在动态库中,否则就不能内联了.所以它不能内联.)