在哪里可以找到关于x86微体系结构的“市场份额”的数据?X86家庭CPU的用户中有多少百分比的CPU支持SSE4.2、AVX、AVX2等?
我正在为我的程序分发预编译的二进制文件,我想知道什么是最佳的优化目标,哪些SIMD扩展可以在不进行运行时检查的情况下被合理地使用。
我可以找到整体英特尔对AMD的市场份额数据,但没有细分的英特尔和AMD的CPU。理想情况下,我也希望按操作系统和国家进行细分,但即使是微体系结构的总体全球统计数据也总比没有好。
发布于 2018-10-28 23:17:02
任何比SSE2 (x86-64的基线)没有运行时检查的更新都是危险的,如果没有回退或安装时检测。
令人遗憾的是,AVX和BMI1 1/2离基线还差得很远,因为英特尔仍在销售Celeron/Pentium芯片,该芯片的VEX前缀解码已被禁用(想必是为了利用在256位执行单元中存在缺陷的硅),但use 4.2正变得越来越近,而SSSE3是一种可能。参见最近的处理器不支持SSSE3指令?和Mac支持sse版本
所有64位英特尔架构是否都支持SSSE3 3/SSE4.1/SSE4.2指令?有一个用于蒸汽客户端的阀门硬件测量 链接(目前显示SSE3为100%的安装基础,但SSSE3仅为97%),所以如果您正在发布一款与目标用户很好相关的PC游戏。但是,对于一些条目来说,这些细分有点奇怪。像fcmov (x87无分支条件移动)一样,据报道已经完成了97.5%的任务,但是每个与P6兼容的CPU都有它。您将找不到一个SSE2的CPU,但没有FCMOV。也许新版本的蒸汽没有对其进行测试。也许旧版本的蒸汽还没有测试CMPXCHG16B呢?所以,用一点盐来看,但对于SSE2 2/3/SSSE3 3/SSE4.x和AVX来说,它们可能是相当明智的。
对于服务器内容,您可以很容易地设置SSE4.2最小值。Atom/Silvermont支持它,AMD和VIA的低功耗架构也是如此,因此节能服务器可以运行它。除了个人家庭服务器之外,古老的主流CPU往往不会得到太多的服务器使用,因为它们通常比运行更凉爽的更便宜的现代机器慢。
(Silvermont不太可能很快支持AVX,甚至更少支持AVX2或FMA。)
您没有让将自己限制为一个二进制文件。甚至可以让人们在下载时进行选择,或者安装程序可以在安装时进行选择。
或者您可以使用一个运行时包装器来选择一个可执行的和动态的库,这样您就可以有效地获得运行时调度,同时仍然能够使用gcc -O3 -march=haswell或其他任何东西让编译器在各处使用新的指令集(特别是对BMI1 1/BMI1 2进行有效的单变量移位)。
另一个选项是动态链接器技巧,无论是在一个完整的库基础上还是在每个函数的基础上,比如glibc用于将memcpy解析为__memset_avx2_unaligned_erms。erms“超过了。这是否意味着内存是不对齐的?”
所有这些(除了每个函数的动态链接器技巧之外)都比让您的代码在运行时了解指令集扩展更容易,而且性能开销为零。(除非您将内容放入一个动态库中,而您没有其他东西,因此它无法内联。)
发布于 2018-10-30 03:21:54
解决这个问题的简单方法(作为一个前游戏程序员),就是为您希望支持的每个CPU级别(例如SSE2、SSE4、AVX2)编译二进制文件。游戏的“可执行文件”只是一个cpuid检查,然后根据检测到的CPU运行正确的exe。
https://stackoverflow.com/questions/53036557
复制相似问题