【问题标题】:x86 microarchitecture/SIMD market sharex86 微架构/SIMD 市场份额
【发布时间】:2019-04-01 20:34:09
【问题描述】:

在哪里可以找到有关 x86 微架构“市场份额”的数据? x86 系列 CPU 的用户中有多少百分比的 CPU 支持 SSE4.2、AVX、AVX2 等?

我正在为我的程序分发预编译的二进制文件,我想知道什么是最佳优化目标,以及哪些 SIMD 扩展可以在没有运行时检查的情况下合理使用。

我可以找到英特尔与 AMD 的整体市场份额数据,但不能找到英特尔和 AMD 几代 CPU 的细分数据。理想情况下,我还希望按操作系统和国家/地区进行细分,但即使是微架构的一般全球统计数据也总比没有好。

【问题讨论】:

  • 您是否考虑过运送多个二进制文件/DLL/SO 并在安装过程中找出正确的一个?这样的数据可能不太容易找到。
  • @DanielKamilKozar 我已经考虑过这个(以及多版本函数),但我希望消除这种复杂性。
  • 如果没有回退或安装时检测,任何比 SSE2(x86-64 的基线)更新的东西如果没有运行时检查都是有风险的。 AVX 和 BMI1/2 距离基线还很远,因为英特尔仍在销售禁用 VEX 前缀解码的赛扬/奔腾芯片(大概是为了利用 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? 有一个指向 the Valve Hardware Survey for Steam 客户端的链接(目前显示 SSE3 的安装基数约为 100%,但 SSSE3 仅占 97%),所以如果您'正在发布一款应该与您的目标受众密切相关的 PC 游戏。对于服务器的东西,您可以轻松设置 SSE4.2 最小值。
  • @PeterCordes 这是很棒的信息。请将其发布为答案!

标签: x86 sse simd instruction-set baseline


【解决方案1】:

如果没有后备或安装时检测,任何比 SSE2(x86-64 的基线)更新的没有运行时检查的东西都是有风险的。

遗憾的是,AVX 和 BMI1/2 距离基准还很远,因为英特尔仍在销售禁用 VEX 前缀解码的赛扬/奔腾芯片(大概是为了利用 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。)


您不必将自己限制为单个二进制文件。您甚至可以让人们在下载时选择,或者您的安装程序可以在安装时选择。

或者你可以有一个运行时包装器来选择一个可执行和动态库,这样你就可以有效地进行运行时调度,同时仍然能够使用gcc -O3 -march=haswell 或任何让编译器在各处使用新指令集的东西进行编译(尤其对 BMI1/BMI2 有利于实现高效的单微指令可变计数移位)。

另一个选项是动态链接器技巧,无论是在整个库的基础上,还是在每个函数的基础上,例如 glibc 用于将 memcpy 解析为 __memset_avx2_unaligned_ermsperf report shows this function "__memset_avx2_unaligned_erms" has overhead. does this mean memory is unaligned?

所有这些(除了每个函数的动态链接器技巧)都比让您的代码在运行时了解指令集扩展更容易,并且性能开销为零。 (除非你把东西放在动态库中,否则它不能内联。)

【讨论】:

  • 非常好的答案!路由器/NAS/微服务器中使用的不是 Atom/Silvermont CPU,而不是成熟的服务器吗?但是,对设备进行分类的界限很模糊。令人着迷的是,英特尔如今几乎可以在任何地方安装大量内核。
  • @MargaretBloom:是的,Silvermont 确实用于 NAS / 微服务器类型的东西。我不知道是否有使用它的高密度服务器,人们实际上会把它放在数据中心来提供一堆硬盘驱动器。不过,如果你用谷歌搜索“avoton 服务器”,就会有很多点击量。例如logicsupply.com/ml600g-10 是您所说的无风扇微服务器。 Supermicro 确实为他们的 mini-ITX Avoton 提到了 1U 机箱:supermicro.com/products/motherboard/atom/x10/a1sai-2750f.cfm
  • @MargaretBloom:哦,对了,当前一代的 Atom 服务器不再是 Avoton。 supermicro.com/products/motherboard/Atom 列出了一系列较新的主板,包括一些具有 Flex ATX 外形尺寸和 16-core C3958 CPU (TDP = 31W) 以及高达 256GB 的注册 ECC DIMM、4x 10GBase-T 和 2x SATA3。或者带有 12x SATA3 + 2x 10Gb 以太网的 Mini-ITX 板。这些是成熟的服务器,带有 M.2 和 PCIe 插槽。
【解决方案2】:

解决此问题的简单方法(作为前游戏程序员)是为您希望支持的每个 CPU 级别(例如 SSE2、SSE4、AVX2)简单地编译二进制文件。游戏的“可执行文件”只是一个 cpuid 检查,然后根据检测到的 CPU 运行正确的 exe。

【讨论】:

    猜你喜欢
    • 2019-11-03
    • 2022-06-23
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 2019-03-08
    • 2017-06-22
    • 1970-01-01
    • 2016-06-20
    相关资源
    最近更新 更多