在哪里可以找到有关x86微体系结构“市场份额”的数据? x86系列CPU的用户中有百分之多少的CPU支持SSE4.2,AVX,AVX2等?
我正在为程序分发预编译的二进制文件,我想知道什么是最佳的优化目标,以及哪些SIMD扩展可以在不进行运行时检查的情况下合理使用。
我可以找到英特尔与AMD的整体市场份额数据,但找不到英特尔和AMD几代CPU的细分。理想情况下,我也希望按操作系统和每个国家/地区进行细分,但即使是微体系结构的一般全球统计总比没有好。
答案 0 :(得分:6)
如果没有后备或安装时间检测,则没有运行时检查的任何比SSE2(x86-64的基准)更新的事物都是有风险的。
令人遗憾的是,AVX和BMI1 / 2距离基准还差得很远,因为英特尔仍在销售已禁用VEX前缀解码的Celeron / Pentium芯片(大概是使用256位执行单元中有缺陷的硅片),而是SSE4。 2越来越近,SSSE3是可能的。参见Most recent processor without support of SSSE3 instructions?和Mac OSX minumum support sse version
Do all 64 bit intel architectures support SSSE3/SSE4.1/SSE4.2 instructions?包含指向Steam客户端的 the Valve Hardware Survey的链接(当前显示的SSE3安装率为100%,而SSSE3仅显示为97%),因此,如果重新发布了PC游戏,该游戏应该与您的目标受众非常相关。但是,对于某些条目,细分情况有些奇怪。就像fcmov
(x87无分支条件移动)据报道已完成 down 至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。)
您没有将自己限制为一个二进制文件。您甚至可以让人们在下载时选择,或者安装程序可以在安装时进行选择。< / p>
或者您可以有一个运行时包装程序来选择一个可执行文件和动态库,因此您可以有效地进行运行时分派,同时仍然可以使用gcc -O3 -march=haswell
进行编译,或通过其他任何方式使编译器使用新的指令集位置(对于BMI1 / BMI2特别有效,因为它可以有效地实现单计数变数移位)。
另一个选择是动态链接程序技巧,它可以是基于整个库的,也可以基于每个函数的,例如glibc用于将memcpy
解析为__memset_avx2_unaligned_erms
的方法。 perf report shows this function "__memset_avx2_unaligned_erms" has overhead. does this mean memory is unaligned?
所有这些功能(按功能的动态链接器技巧除外)比使您的代码在运行时知道指令集扩展更容易,并且性能开销为零。 (除非您将本来没有的东西放到动态库中,否则它就不能内联。)
答案 1 :(得分:1)
解决此问题的简单方法(以游戏前程序员的身份讲)是为您希望支持的每个CPU级别(例如SSE2,SSE4,AVX2)简单地编译二进制文件。游戏的“可执行文件”只是一个cpuid检查,然后根据检测到的CPU运行正确的exe。