|
y-cruncher——一种多线程Pi-Program |
|
从一个高中项目来看。。。
作者:Alexander J.Yee |
(上次更新时间:2024年4月3日)
第一个用于多核系统的可扩展多线程Pi-benchmark。。。
你的计算机计算Pi的速度有多快?
y-cruncher是一个可以计算Pi和其他数万亿位数的常数的程序。
它是第一个多线程并可扩展到多核系统的同类产品。自2009年推出以来,它已成为超频器和硬件爱好者常用的基准测试和压力测试应用程序。
y-cruncher已被用来创造数项Pi数字最多的世界纪录。
当前版本:
窗户:版本0.8.4建造9538(发布日期:2024年2月22日)
Linux:版本0.8.4建造9538(发布日期:2024年2月22日)
官方Mersenneforum分论坛.
官方HWBOT论坛线程.
新闻:
通过优化对抗编译器回归:(2024年4月3日)-永久链接
这类话题很难写,因为它并不都是正面的。但让我们从一张桌子开始,因为每个人都讨厌文字墙:
处理器 |
建筑 |
时钟速度 |
二元的 |
ISA公司 |
10亿位数Pi(秒) |
0.8.4版 |
v0.8.5(国际商会) |
v0.8.5(ICX) |
v0.8.4->v0.8.5 |
国际商会->国际商会 |
总体 |
酷睿i7 920 |
英特尔Nehalem |
3.5 GHz+3 x 1333 MT/s |
08毫米 |
x64不锈钢4.1 |
535.818 |
492.971 |
482.982 |
+8.00% |
+2.03% |
+9.86% |
核心i7 3630QM |
英特尔常春藤大桥 |
库存+2 x 1600 MT/s |
11-瑞士国家银行 |
x64 AVX |
339.96 |
318.037 |
305.360 |
+6.45% |
+3.99% |
+10.18% |
FX-8350型 |
AMD Piledriver公司 |
库存+2 x 1600 MT/s |
12月2日 |
x64 FMA3型 |
225.749 |
218.338 |
216.159 |
+3.28% |
+1.00% |
+4.25% |
核心i7 5960X |
处理器 |
4.0 GHz+4 x 2400 MT/s |
13-HSW(高速钢) |
x64 AVX2 |
49.441 |
48.568 |
50.205 |
+1.77% |
-3.37% |
-1.55% |
核心i7 6820HK |
英特尔天湖 |
库存+2 x 2133 MT/s |
14个BDW |
x64 AVX2+ADX |
102.144 |
100.887 |
103.570 |
+1.23% |
-2.66% |
-1.40% |
Ryzen 7 1800X型 |
AMD禅宗1 |
库存+2 x 2866 MT/s |
17-ZN1型 |
x64 AVX2+ADX |
77.505 |
75.965 |
76.800 |
+1.99% |
-1.10% |
+0.91% |
芯i9 7940X |
英特尔天湖X |
3.6 GHz(AVX512)+4 x 3466 MT/s |
17平方英尺 |
x64 AVX512-DQ |
20.686 |
19.912 |
20.428 |
+3.74% |
-2.59% |
+1.25% |
瑞岑9 3950X |
AMD禅宗2 |
库存+2 x 2666 MT/s |
19-ZN2型 |
x64 AVX2+ADX |
34.814 |
33.292 |
33.161 |
+4.37% |
+0.39% |
+4.75% |
芯i7 11800H |
英特尔老虎湖 |
库存+2 x 3200 MT/s |
18-CNL公司 |
x64 AVX512-VBMI |
35.739 |
34.438 |
35.052 |
+3.64% |
-1.78% |
+1.92% |
瑞森9 7950X |
AMD禅宗4 |
库存+2 x 5000 MT/s |
22-ZN4型 |
x64 AVX512-GFNI |
18.978 |
18.848 |
18.937 |
+0.69% |
-0.47% |
+0.22% |
ICC是英特尔的老式经典C++编译器(ICC)。ICX是英特尔新推出的LLVM编译器(ICX)。所以我们可以看到:
- y-cruncher v0.8.5将进行新的软件优化,以提高所有处理器的性能。
- 英特尔的新编译器(ICX)在几乎所有现代处理器上都比旧编译器(ICC)差。
简而言之,英特尔的新编译器正在导致y-cruncher的性能下降。为了防止下一个版本的y-cruncher变得越来越慢,我试图用新的性能优化来抵消这些倒退——到目前为止只取得了部分成功。
但我们是怎么到这里的?
英特尔经典的C++编译器历来是代码性能最好的编译器。然而,大约从2020年开始,英特尔开始迁移到一个新的基于LLVM的编译器(ICX),去年他们停止了旧编译器(ICC)的使用。问题是,至少对y-cruncher来说,ICX实际上并不比ICC好。
处理器 |
建筑 |
时钟速度 |
二元的 |
ISA公司 |
BBP-Pi的第100亿个十六进制数字(秒) |
MSVC 17.7.1标准 |
国际商会19.2 |
ICX 2024年 |
国际商会->国际商会 |
核心i7 920 |
英特尔Nehalem |
3.5千兆赫 |
08毫米 |
x64不锈钢4.1 |
568.384 |
574.745 |
725.910 |
-26.30% |
核心i7 3630QM |
英特尔常春藤大桥 |
股票 |
11-瑞士国家银行 |
x64 AVX |
525.811 |
436.337 |
464.628 |
-6.48% |
FX-8350型 |
AMD Piledriver公司 |
股票 |
12-BD2型 |
x64固件A3 |
251.695 |
231.205 |
235.828 |
-2.00% |
核心i7 5960X |
处理器 |
4.0千兆赫 |
13小时 |
x64 AVX2 |
55.249 |
50.640 |
53.422 |
-5.49% |
核心i7 6820HK |
英特尔天湖 |
股票 |
14个BDW |
x64 AVX2 |
107.977 |
105.307 |
108.959 |
-3.47% |
Ryzen 7 1800X型 |
AMD禅宗1 |
股票 |
17-ZN1型 |
x64 AVX2 |
97.809 |
97.915 |
95.269 |
+2.70% |
芯i9 7940X |
英特尔天湖X |
3.6 GHz(AVX512) |
17平方英尺 |
x64 AVX512-DQ |
13.518 |
13.561 |
15.340 |
-13.12% |
瑞森9 3950X |
AMD禅宗2 |
股票 |
19-ZN2型 |
x64 AVX2 |
22.506 |
21.043 |
20.982 |
+0.29% |
芯i7 11800H |
英特尔老虎湖 |
股票 |
18-CNL公司 |
x64 AVX512-DQ |
50.002 |
50.798 |
51.654 |
-1.69% |
瑞森9 7950X |
AMD禅宗4 |
股票 |
22-ZN4型 |
x64 AVX512-DQ |
11.521 |
11.424 |
12.232 |
-7.07% |
换言之,英特尔摆脱了旧编译器,而新编译器的性能尚未与之匹配。而且由于需要保持对C++功能和CPU指令集的最新了解,我不能永远使用旧编译器。因此,即使会影响性能,“升级”也是不可避免的。
其他编译器呢?如果英特尔的新编译器不好,那么其他替代品呢?好。。。
- 微软的编译器总体上比英特尔的两种编译器都差。
- GCC在Windows上不可用,原因是这个12年前的错误没有被修复的迹象。
- Clang我还没有测试过,但它也像ICX一样基于LLVM。因此,如果它比ICX好的话,我会感到惊讶。
因此,即使英特尔让他们的编译器变得更糟糕,它仍然比竞争对手更好。
那么,为什么英特尔的新编译器比旧编译器差呢?
与经典编译器相比,Intel的LLVM编译器中没有一个回归负责整个回归。这是许多回归(和改进)的组合,这些回归加起来最终以百分之几的优势获胜。有趣的是,小的回归往往涉及较差的指令选择和排序,而较大的回归往往属于以下类别:
- 寄存器分配不佳。具有太多活动值而无法放入寄存器的代码在ICX上的溢出量往往大于ICC。虽然ICX2024中的这一点有所改进,但ICC在这里仍然处于领先地位。
- ICX无法对齐矢量寄存器溢出的堆栈。对于具有许多向量寄存器溢出的大型函数,ICX不会对齐溢出的值。结果是寄存器溢出会导致失准惩罚,而寄存器分配不当则进一步加剧了这种惩罚。对齐堆栈的唯一方法是使用编译器选项,该选项可将代码锁定到英特尔处理器。这意味着如果你打开它,二进制文件将不会在AMD处理器上运行。
- 循环不变代码运动(LICM)和通用子表达式消除(CSE)通常组合在一起会破坏堆栈和代码大小。
- ICX在循环优化方面过于激进,如果不完全禁用优化,就无法关闭循环优化。
最后一类特别令人讨厌。复杂的循环优化,如环内切换,回路聚变/裂变,循环物化,攻击性循环展开,等等……对于大多数编译器来说,由于存在回火的高风险,只能在最大优化级别(O3)下启用。然而,我观察到,对于ICX,其中大多数已经在O1和O2下启用,并且很难或不可能禁用。当这种优化适得其反时,它可能会以3倍或更多的倍数轻易地破坏循环的性能。
下面是一些伪代码示例,说明了我观察到的ICX循环优化适得其反的主要方式。经历这种行为的实际代码通常要大得多,而且大小也更复杂。我们已经向英特尔工程师提供了一些自带的示例,希望他们能够改进编译器。
示例1: 环路融合失败
双重的*A=。。。;
对于(尺寸_tc=0;c<长度;c++){
双重的tmp=A[c];
//长依赖链。
A[c]=tmp;
}
对于(尺寸_tc=0;c<长度;c++){
双重的tmp=A[c];
//长依赖链。
A[c]=tmp;
}
在本例中,每个循环的迭代都是独立的,可以并行运行。但在每个迭代中都有一个长的依赖链。为了在CPU重新排序窗口中保持迭代,工作被有意分割成多个循环(这里显示的不仅仅是2个循环)。这允许CPU重新排序跨迭代-因此允许指令级并行。
然而,ICX并不总是允许这种情况发生。相反,它有时决定通过将循环融合到一起来撤消我的手动优化:
对于(尺寸_tc=0;c<长度;c(c)++){
双重的 临时管理计划=A[c];
// 超级的长依赖链。
A【c】=临时管理计划;
}
虽然这样可以通过只遍历数组一次而不是两次来改善内存局部性。它增加了依赖链,使得CPU不再能够在迭代之间进行足够的重新排序。因此,它会破坏指令级并行(ILP)并影响性能。编译器可能错误地假设数据集不适合缓存,而实际上它适合缓存。
同样的情况也可能发生在环入交换中,ICX将交换循环以改善内存局部性,但代价是创建消除指令级并行性的依赖链。
例2:所有东西都爆炸了
这个例子是一个病理学上很糟糕的案例,其中循环不变代码运动(LICM)和循环展开结合使用可以创建一个完美的风暴,同时破坏指令缓存、数据缓存和性能。虽然它看起来相当具体,但它在y-cruncher中却是一种常见的模式。
这里的代码是迭代使用1000个标量权重的AVX512向量数组。每次使用标量权重时,都会将其广播到全矢量以在阵列a上操作。在AVX512中,标量广播的成本与全矢量加载的成本相同。因此,在内部循环中重做广播不会增加成本。
常数 双重的*重量=。。。;
__512d米*A=。。。;
对于(尺寸_tc=0;c<长度;c(c)++){
__512d米 临时管理计划=A[c];
对于(尺寸_tw=0;w<1000;w++){
__512d米重量=_mm512_设置1_局部放电(重量[w]);
// 标量广播。与常规负载相同的成本。
// 做与“临时管理计划和“重量”。
}
A【c】= 临时管理计划;
}
相反,ICX倾向于将其转变为以下内容:
常数 双重的*重量=。。。;
__512d米*A=。。。;
__512d米 展开_重量0=_mm512_set1_pd(重量[0]);
// 每个都是64字节!
__512d米 展开_重量1=_mm512_set1_pd(重量[1]);
__512d米 展开_重量2=_mm512_set1_pd(重量[2]);
...
__512d米 展开_重量999=_mm512_set1_pd(重量[999]);
对于(尺寸_tc=0;c<长度;c(c)++){
__512d米 临时管理计划=A[c];
// 做带有“临时管理计划“和”展开的权重0".
// 做与“临时管理计划“和”展开的权重1".
// 做与“临时管理计划“和”展开的权重2英寸。
// ...
// 做与“临时管理计划“和”展开的权重999".
A【c】= 临时管理计划;
}
本来应该是一堆(免费)标量广播的内容,现在已经变成了64KB的堆栈使用量和两个完全展开的1000-iteration循环,其中一个循环完全无用。在这个例子中,这种转换从来都没有好处,因为广播负载已经可以自由开始了。因此,用堆栈溢出和丢弃数据和指令缓存来替换它们只会使情况变得更糟。对于较小的值长度,由于初始设置,此转换会对性能造成破坏。
那么发生了什么?
- 编译器首先会看到内部循环具有编译时行程计数。所以它决定可以完全展开它。我从未见过编译器完全展开这么大的循环,但ICX显然是用几个y-cruncher内核来完成的。
- 编译器推断出重量不别名为A类因此,可以看出负载和标量广播是循环不变的。所以它把他们从循环中拉了出来。是的,总共1000个。
- 这1000个值需要去某个地方,对吗?因此,它会将它们溢出到堆栈中(并且还会因堆栈未对齐而招致任何惩罚)。
简单地说,其他编译器不做这种事情。或者至少他们有限制来防止这种情况发生。ICX似乎完全不受约束。
ICX错误优化中的一个常见主题是,循环不变量代码运动(LICM)和公共子表达式消除(CSE)将创建额外的活动值,这些值最终会溢出到堆栈中,因此调用的惩罚通常大于初始节省。上面的例子是一个樱桃点缀的例子,ICX将这个概念发挥到了极致,导致了二次回归的雪崩,例如错位惩罚和缓存污染。
结论:
英特尔的LLVM编译器无疑是一个非常强大的编译器。我学得越多,对它的能力印象就越深刻。然而,权力伴随责任,不幸的是,我不能说ICX很好地运用了这一权力。我还没有调查这些问题是在LLVM本身还是在英特尔对其进行的修改中。但不管怎样,到今天为止,英特尔的LLVM编译器最能被描述为一个带剪刀的孩子——年轻而鲁莽地使用危险的工具。
ICX需要多长时间才能达到ICC的代码生成质量?我不知道。在等待了一年多之后,我决定这可能在很长一段时间内不会发生。对于ICX搞砸的每一件事,它可能会让其他5件事都做对。但对于已经进行过手动优化的代码,正确地使用它是中性的,而错误地使用它会带来很大的伤害。下拉到汇编不是一个选项,因为有“数千”个不同的内核,它们大部分是通过模板元编程生成的。
y-cruncher是唯一受此影响的应用程序吗?可能不会。
旧新闻
y-cruncher设置的记录:
y-cruncher已经被用于设置许多世界纪录大小的计算。
蓝色:当前世界纪录
绿色:前世界纪录
红色:未经验证的计算。只有使用替代配方进行验证,才有资格成为世界纪录。
发布日期 |
完成日期: |
资料来源: |
谁: |
常量: |
十进制数字: |
时间: |
计算机: |
2024年3月14日 |
2024年2月27日 |
来源 |
乔丹·拉努斯
凯文·奥布莱恩
布莱恩·比勒
(StorageReview) |
圆周率 |
105,000,000,000,000 |
计算:75天
验证:4天
验证文件 |
2 x AMD Epyc 9754 1.5 TB 960 TB存储 |
2024年2月13日 |
2024年2月12日 |
|
乔丹·拉努斯 |
日志(2) |
3,000,000,000,000 |
计算:42.7小时
验证:58.3小时 |
2 x Intel Xeon铂金8460H 512 GB |
2024年1月17日 |
2023年1月10日 |
|
马杜·巴拉卡特 |
泽塔(5) |
250亿 |
计算:6.02天
未验证 |
Intel Xeon Gold 5412U
125 GB |
2024年1月17日 |
2023年12月12日 |
|
乔丹·拉努斯 |
伽玛(1/4) |
1,000,000,000,000 |
计算:22.6小时
验证:22.8小时 |
2 x Intel Xeon铂金8450H 512 GB |
2023年12月26日 |
2023年12月24日 |
|
乔丹·拉努斯 |
e(电子) |
35,000,000,000,000 |
计算:94.5小时
验证:92.5小时 |
2 x Intel Xeon铂金8460H 512 GB |
2023年12月26日 |
2023年12月25日 |
|
乔丹·拉努斯 |
2的平方根 |
20,000,000,000,000 |
计算:29.2小时
验证:21.6小时 |
Intel Xeon铂金8450H 512 GB Intel Xeon铂金8460H 512 GB |
2023年12月26日 |
2023年12月22日 |
|
安德鲁·孙 |
泽塔(3)-阿佩里常数 |
2,020,569,031,595 |
计算:5.61天
验证:5.93天 |
英特尔至强白金8347C 505 GB Intel Xeon白金8347C 507 GB |
2023年12月18日 |
2023年12月15日 |
|
乔丹·拉努斯 |
伽马(1/3) |
1,000,000,000,000 |
计算:17.5小时
验证:23.3小时 |
2 x Intel Xeon铂金8450H
512 GB |
2023年12月18日 |
2023年12月11日 |
|
乔丹·拉努斯 |
泽塔(5) |
201,000,001,300 |
计算:29.9小时
验证:23.5小时 |
2 x AMD EPYC 9754
1.5 TB |
2023年12月2日 |
2023年11月27日 |
|
乔丹·拉努斯 |
黄金比例 |
20,000,000,000,000 |
计算:76.1小时
验证:30.0小时 |
AMD Epyc 9654-1.5 TB
Intel Xeon铂金8450H |
2023年9月9日 |
2023年9月7日 |
|
安德鲁·孙 |
Euler-Mascheroni常数 |
1,337,000,000,000 |
计算:28.5天
验证:41.3天 |
Intel Xeon白金83470C
400 GB |
2022年7月17日 |
2022年7月15日 |
|
Seungmin Kim先生 |
柠檬酸盐 |
1,200,000,000,100 |
计算:32.2天
验证:46.5天 |
2 x Intel Xeon Gold 6140 377 GB |
2022年6月8日 |
2022年3月21日 |
|
艾玛·哈鲁卡·伊沃(Emma Haruka Iwao) |
圆周率 |
100,000,000,000,000 |
计算:158天
验证:12.6小时
验证文件 |
128 vCPU Intel Ice Lake(GCP) 864 GB 663 TB存储 |
2022年3月14日 |
2022年3月9日 |
|
Seungmin Kim先生 |
加泰罗尼亚常数 |
1,200,000,000,100 |
计算:48.6天
验证:47.3天 |
2 x Intel Xeon Gold 6140 2 x Intel XeonE5-2680版本3 |
2021年8月17日 |
2021年8月14日 |
来源 |
UAS格里森 |
圆周率 |
62831853071796 |
计算:108天
验证:34.4小时 |
AMD Epyc 7542公司 1 TB 34+4个硬盘 |
2020年9月13日 |
2020年9月6日 |
|
Seungmin Kim先生 |
日志(10) |
1,200,000,000,100 |
计算:14.5天
验证:22.5天 |
2 x Intel Xeon E5-2699 v3 756 GB 2个Intel Xeon Gold 5220 754 GB |
2020年1月29日 |
2020年1月29日 |
博客 |
蒂莫西·穆利肯 |
圆周率 |
50,000,000,000,000 |
计算:303天
验证:17.2小时
验证文件 |
4 x Intel Xeon E7-4880 v2
315 GB
48个硬盘驱动器 |
2019年3月14日 |
2019年1月21日 |
博客
1+2 |
艾玛·哈鲁卡·伊沃(Emma Haruka Iwao) |
圆周率 |
31,415,926,535,897 |
计算:121天
验证:20.0小时
验证文件 |
2 x未公开的Intel Xeon >1.40 TB DDR4 >240 TB固态硬盘 |
2016年11月15日 |
2016年11月11日 |
博客
赞助商 |
彼得·特鲁布 |
圆周率 |
22,459,157,718,361 |
计算:105天
验证:28小时
验证文件 |
4 x Xeon E7-8890 v3 1.25结核病DDR4 20 x 6 TB 7200 RPM希捷 |
2014年10月8日 |
2014年10月7日 |
|
桑登·范·内斯
(houkounchi) |
圆周率 |
13300000000000美元 |
计算:208天
验证:182小时
验证文件 |
2台Xeon E5-4650L 192 GB DDR3@1333 MHz 24 x 4 TB+30 x 3 TB |
2013年12月28日 |
2013年12月28日 |
来源 |
近藤茂 |
圆周率 |
12,100,000,000,050 |
计算:94天
验证:46小时 |
2个Xeon E5-2690 128 GB DDR3@1600 MHz 24 x 3 TB |
请参阅完整列表包括其他显著的大型计算。如果你想自己设置一个记录,规则就在这个链接中。
特征:
y-cruncher的主要计算特征是:
- 能够计算Pi和其他数万亿位数的常数。
- 对于大多数常量,有两种算法可用。一个用于计算,一个用于验证。
- 多线程-多线程可以用来充分利用现代多核处理器,而不会显著增加内存使用。
- 量化的-能够充分利用大多数处理器的SIMD功能。(SSE、AVX、AVX512等)
- 交换空间管理需要比可用内存更多的大型计算。
- 多硬盘驱动器-多个硬盘驱动器可用于更快的磁盘交换。
- 半故障容差-能够检测并纠正可能由硬件不稳定或软件错误引起的微小错误。
下载:
示例截图:1万亿位圆周率
|
核心i7 5960X@4.0 GHz-64 DDR4@2400 MHz-16个HD |
最新版本:(2024年2月22日)
下载任何这些文件都构成对许可协议.
也可以找到下载在GitHub上。如果您喜欢HTTPS,请使用此选项。
Linux版本有静态链接版本和动态链接版本。静态版本应该适用于大多数Linux发行版,但缺少TBB和NUMA绑定。动态版本支持所有功能,但由于DLL依赖项地狱.
HWBOT公司提交随此版本返回。所以我希望很快能改写排行榜。
系统要求:
窗户:
- Windows 7或更高版本。
- HWBOT提交程序需要Java 8 Runtime。
Linux:
- 需要64位Linux。不支持32位。
- 动态版本已经在Ubuntu 22.04上进行了测试。
所有系统:
不满足这些要求的非常旧的系统可能能够运行较旧版本的y-cruncher。支持一直追溯到Windows XP之前。
版本历史记录:
其他下载(适用于C++程序员):
高级文档:
基准:
比较图:(上次更新时间:2023年7月11日)
将圆周率计算为各种大小。所有时间均以秒为单位。所有计算都完全在ram中完成。
计时包括将数字转换为十进制表示所需的时间,但不包括将数字写入磁盘所需的次数。
蓝色:基准是最新版本的y-cruncher。
绿色:基准测试是用一个旧版本的y-cruncher完成的,其性能与当前版本相当。
红色:由于使用的是旧版本的y-cruncher,无法与当前版本相比,因此基准测试已经过时了。
紫色:基准测试来自未发布的内部构建,其速度无法与当前版本相比。
笔记本电脑+低功耗:
处理器: |
核心i7 6820HK |
芯i7 11800H |
芯i7 11800H |
生成: |
英特尔天湖 |
英特尔老虎湖 |
英特尔老虎湖 |
芯/螺纹: |
4/8 |
8/16 |
8/16 |
处理器速度: |
3.2 GHz(库存) |
~2.5 GHz(45W PL) |
约3.0 GHz(60瓦PL) |
内存: |
64 GB@2133 MT/s |
64 GB@3200 MT/s |
64 GB@3200 MT/s |
版本: |
v0.8.1(14-BDW) |
v0.8.1(18-CNL) |
v0.8.1(18-CNL) |
指令集: |
x64 AVX2+ADX |
x64 AVX512-VBMI |
x64 AVX512-VBMI |
25,000,000 |
1.500 |
0.655 |
0.530 |
50,000,000 |
3.307 |
1.406 |
1.125 |
100,000,000 |
7.238 |
3.005 |
2.447 |
250,000,000 |
20.596 |
8.576 |
6.855 |
500000000 |
45.967 |
19.747 |
15.356 |
1,000,000,000 |
102.885 |
42.727 |
34.308 |
2,500,000,000 |
290.824 |
123.523 |
96.918 |
5,000,000,000 |
640.506 |
247.705 |
218.782 |
10,000,000,000 |
1,391.204 |
526.212 |
480.197 |
学分: |
|
|
|
处理器: |
核心i3 8121U |
芯i7 11800H |
生成: |
英特尔加农湖 |
英特尔老虎湖 |
芯线/螺纹: |
2/4 |
8/16 |
处理器速度: |
~2.5-3.2 GHz(库存) |
~2.5-2.8 GHz(45W PL) |
内存: |
8 GB@2400 MT/s |
64 GB@3200 MT/s |
版本: |
v0.8.1(14-BDW) |
v0.8.1(17-SKX) |
v0.8.1(18-CNL) |
v0.8.1(14-BDW) |
v0.8.1(17-SKX) |
v0.8.1(18-CNL) |
指令集: |
x64 AVX2+ADX |
x64 AVX512-DQ |
x64 AVX512-VBMI |
x64 AVX2+ADX |
x64 AVX512-DQ |
x64 AVX512-VBMI |
25,000,000 |
2.857 |
2.467 |
1.988 |
0.907 |
0.853 |
0.655 |
50,000,000 |
6.446 |
5.501 |
4.392 |
2.075 |
1.862 |
1.406 |
100,000,000 |
14.335 |
12.257 |
9.490 |
4.176 |
3.749 |
3.005 |
250,000,000 |
42.566 |
36.204 |
27.137 |
12.014 |
10.705 |
8.576 |
500,000,000 |
99.040 |
85.443 |
64.359 |
28.805 |
24.123 |
19.747 |
1,000,000,000 |
228.863 |
198.405 |
151.605 |
63.898 |
55.264 |
42.727 |
2,500,000,000 |
|
|
|
187.882 |
148.423 |
123.523 |
5,000,000,000 |
|
|
|
375.130 |
327.776 |
247.705 |
10,000,000,000 |
|
|
|
794.573 |
709.606 |
526.212 |
学分: |
|
|
|
|
|
|
主流台式机:
处理器: |
瑞森5 7600 |
核心i9 11700K |
瑞森9 3950X |
瑞森9 5950X |
Intel Core i9 13900KS |
瑞森9 7950X |
生成: |
AMD禅4 |
英特尔火箭湖 |
AMD禅宗2 |
AMD禅宗3 |
英特尔猛禽湖 |
AMD禅4 |
芯/螺纹: |
6/12 |
8/16 |
16/32 |
16/32 |
24/32 |
16/32 |
处理器速度: |
|
股票 |
股票 |
股票 |
5.7/4.5千兆赫 |
股票 |
内存: |
32 GB |
32 GB-3200 MT/s |
128 GB-2666 MT/s |
64 GB-3200 MT/s |
96 GB-8000 MT/s |
128 GB-4400 MT/s |
128 GB-5200 MT/s |
程序版本: |
v0.8.1(22-ZN4) |
v0.8.1(18-CNL) |
v0.8.1(19-ZN2) |
v0.8.1(19-ZN2) |
v0.8.1(14-BDW) |
v0.8.1(22-ZN4) |
指令集: |
x64 AVX512-GFNI |
x64 AVX512-VBMI |
x64 AVX2+ADX |
x64 AVX2+ADX |
x64 AVX2+ADX |
x64 AVX512-GFNI |
25,000,000 |
0.439 |
0.501 |
0.588 |
0.490 |
0.241 |
0.312 |
0.307 |
50,000,000 |
|
1.114 |
1.257 |
1.090 |
0.525 |
0.679 |
0.654 |
100,000,000 |
|
2.223 |
2.685 |
2.345 |
1.132 |
1.517 |
1.410 |
250,000,000 |
|
6.220 |
7.251 |
6.371 |
3.185 |
4.157 |
3.820 |
500,000,000 |
13.378 |
13.573 |
15.556 |
13.395 |
7.065 |
8.883 |
8.062 |
1,000,000,000 |
29.497 |
30.415 |
33.925 |
29.301 |
15.901 |
18.542 |
17.039 |
2,500,000,000 |
83.421 |
86.119 |
96.695 |
82.204 |
44.888 |
50.743 |
46.467 |
5,000,000,000 |
181.647 |
193.718 |
215.333 |
181.355 |
99.566 |
110.379 |
101.345 |
10,000,000,000 |
|
|
473.958 |
399.012 |
|
241.162 |
220.522 |
25,000,000,000 |
|
|
1,361.732 |
|
|
680.344 |
623.493 |
学分: |
乔尔·鲁芬 |
奥利弗·克鲁斯 |
|
奥利弗·克鲁斯 |
曾铮 |
|
|
处理器: |
核心i7 920 |
FX-8350型 |
核心i7 4770K |
Ryzen 7 1800X型 |
Ryzen 7 3800倍 |
生成: |
英特尔Nehalem |
AMD Piledriver公司 |
处理器 |
AMD禅宗1 |
AMD禅宗2 |
芯/螺纹: |
4/8 |
8/8 |
4/8 |
8/16 |
8/16 |
处理器速度: |
3.5千兆赫 |
股票 |
4.0千兆赫 |
股票 |
股票 |
内存: |
12 GB-1333 MT/s |
32 GB-1600 MT/s |
32 GB-2133 MT/s |
64 GB-2866公吨/秒 |
32 GB-3600 MT/s |
程序版本: |
v0.8.1(08-NHM) |
v0.8.1(11-BD1) |
v0.8.1(13-HSW) |
v0.8.1(17-ZN1) |
v0.8.1(19-ZN2) |
指令集: |
x64不锈钢4.1 |
x64 FMA4型 |
x64 AVX2 |
x64 AVX2+ADX |
x64 AVX2+ADX |
25,000,000 |
7.032 |
3.677 |
1.546 |
1.150 |
0.654 |
50,000,000 |
17.174 |
7.703 |
3.259 |
2.527 |
1.415 |
100,000,000 |
36.164 |
16.576 |
6.987 |
5.555 |
3.028 |
250,000,000 |
105.789 |
46.597 |
19.588 |
15.760 |
8.404 |
500,000,000 |
236.096 |
103.165 |
43.197 |
34.659 |
18.440 |
1,000,000,000 |
531.676 |
230.780 |
96.845 |
78.690 |
41.097 |
2,500,000,000 |
|
669.594 |
274.336 |
220.278 |
117.788 |
5,000,000,000 |
|
1,460.714 |
606.605 |
493.388 |
266.719 |
10,000,000,000 |
|
|
|
1,078.187 |
|
25,000,000,000 |
|
|
|
|
|
学分: |
|
|
|
|
奥利弗·克鲁斯 |
高端台式机:
处理器: |
核心i7 5960X |
裂线器1950X |
芯i9 7900X |
芯i9 7940X |
螺纹裂土器3990X |
至强W7-2495X |
Xeon W9-3475X公司 |
生成: |
处理器 |
AMD Zen 1型 |
英特尔天湖X |
英特尔天湖X |
AMD禅宗2 |
英特尔Sapphire Rapids |
英特尔Sapphire Rapids |
芯/螺纹: |
8/16 |
16/32 |
10/20 |
14/28 |
64/128 |
24/48 |
第36页,共72页 |
处理器速度: |
4.0千兆赫 |
股票 |
约3.6 GHz(200瓦PL) |
3.6 GHz(AVX512) |
2.9千兆赫 |
4.1-4.9千兆赫 |
4.2-4.9千兆赫 |
内存: |
64 GB-2400 MT/s |
64 GB-2800 MT/s |
128 GB-3000 MT/s |
128 GB-3466 MT/s |
约141 GB-2666 MT/s |
64 GB-6400 MT/s |
128 GB-6400 MT/s |
程序版本: |
v0.8.1(13-HSW) |
v0.8.1(17-ZN1) |
v0.8.1(17-SKX) |
v0.8.1(17-SKX) |
v0.8.1(19-ZN2) |
v0.8.1(18-CNL) |
v0.8.3(18-CNL) |
指令集: |
x64 AVX2 |
x64 AVX2+ADX |
x64 AVX512-DQ |
x64 AVX512-DQ |
x64 AVX2+ADX |
x64 AVX512-VBMI |
x64 AVX512-VBMI |
2500万 |
0.807 |
0.756 |
0.522 |
0.404 |
0.584 |
0.170 |
0.201 |
50,000,000 |
1.743 |
1.579 |
1.028 |
0.721 |
1.181 |
0.340 |
0.321 |
100,000,000 |
3.647 |
3.273 |
2.048 |
1.451 |
2.409 |
0.726 |
0.586 |
250,000,000 |
10.088 |
8.990 |
5.752 |
4.056 |
5.724 |
2.068 |
1.413 |
500,000,000 |
22.075 |
19.604 |
12.830 |
9.017 |
10.881 |
4.588 |
2.627 |
1,000,000,000 |
49.232 |
43.014 |
28.906 |
20.518 |
21.496 |
10.190 |
5.924 |
2,500,000,000 |
139.404 |
121.645 |
82.764 |
60.636 |
58.009 |
28.881 |
16.345 |
5,000,000,000 |
311.388 |
271.983 |
186.233 |
137.906 |
126.513 |
64.158 |
36.139 |
10,000,000,000 |
669.736 |
613.450 |
401.820 |
302.121 |
274.050 |
124.826 |
78.816 |
25,000,000,000 |
|
|
1,125.775 |
843.498 |
768.212 |
|
225.482 |
学分: |
|
奥利弗·克鲁斯 |
|
|
保罗·安德伍德 |
曾铮 |
多处理器工作站/服务器:
由于高岩芯数和NUMA的影响(非统一内存访问),多处理器系统上的性能对各种设置极为敏感。因此,这些基准测试可能不能完全代表硬件的能力。
处理器: |
Xeon铂8375C
(AWS x2iedn.32x大) |
Xeon铂金8488C
(AWS m7i.48x大) |
Epyc 9R14型
(AWS m7a.48x大) |
Epyc 9R14型
(AWS hpc7a.96x大) |
Epyc 9754公司 |
生成: |
英特尔Sapphire Rapids |
英特尔Sapphire Rapids |
AMD热那亚 |
AMD贝加莫 |
芯/螺纹: |
64/128 |
96/192 |
192/192 |
128/256 |
128/128 |
处理器速度: |
2.9千兆赫 |
2.4千兆赫 |
2.6千兆赫 |
2.25-3.1千兆赫 |
内存: |
4结核 |
744 GB |
740 GB |
768 GB-4800 MT/s |
程序版本: |
v0.8.1(18-CNL) |
v0.8.1(18-CNL) |
v0.8.1(22-ZN4) |
v0.8.1(22-ZN4) |
指令集: |
x64 AVX512-VBMI |
x64 AVX512-VBMI |
x64 AVX512-GFNI |
x64 AVX512-GFNI |
25,000,000 |
0.250 |
0.163 |
0.216 |
0.213 |
0.245 |
0.229 |
50,000,000 |
0.454 |
0.289 |
0.285 |
0.279 |
0.350 |
0.433 |
100,000,000 |
0.844 |
0.531 |
0.642 |
0.635 |
0.853 |
0.876 |
250,000,000 |
1.976 |
1.288 |
1.776 |
1.716 |
2.224 |
2.133 |
500,000,000 |
3.794 |
2.499 |
3.728 |
3.621 |
4.186 |
3.850 |
1,000,000,000 |
7.650 |
5.149 |
6.547 |
6.265 |
7.063 |
6.495 |
2,500,000,000 |
20.425 |
13.633 |
13.554 |
12.500 |
15.338 |
14.477 |
5,000,000,000 |
45.675 |
29.655 |
25.334 |
22.377 |
29.072 |
28.133 |
10,000,000,000 |
101.468 |
64.026 |
51.134 |
44.059 |
58.797 |
59.007 |
25,000,000,000 |
297.622 |
182.920 |
140.286 |
120.282 |
156.797 |
164.281 |
50,000,000,000 |
678.016 |
410.842 |
321.970 |
275.297 |
350.391 |
368.548 |
100,000,000,000 |
1,549.991 |
943.182 |
771.266 |
672.558 |
829.957 |
853.717 |
250,000,000,000 |
4,488.317 |
|
|
|
|
|
500,000,000,000 |
9,685.971 |
|
|
|
|
|
学分: |
格雷格·霍根 |
蒂姆·韦斯利 |
处理器: |
Xeon铂金8124M |
至强黄金6148 |
Xeon铂金8175M |
Xeon铂8275CL |
Epyc 7742公司 |
Epyc 7B12型 |
Epyc 7742型 |
生成: |
英特尔天湖Purley |
英特尔天湖Purley |
英特尔天湖Purley |
英特尔级联湖 |
AMD罗马 |
AMD罗马 |
AMD罗马 |
插座/芯线/螺纹: |
2/36/72 |
2/40/40 |
2/48/96 |
2/48/96 |
2/128/256 |
2/112/224 |
2/128/256 |
处理器速度: |
3.0千兆赫 |
2.4千兆赫 |
2.5千兆赫 |
3.0千兆赫 |
|
2.25千兆赫 |
2.25千兆赫 |
内存: |
137 GB-?? |
188 GB-?? |
~756 GB-?? |
192 GB |
约504 GB |
约882 GB |
2 TB |
程序版本: |
v0.7.5(17-SKX) |
v0.7.6(17-SKX) |
v0.7.6(17-SKX) |
v0.7.8(17-SKX) |
v0.7.7(17-ZN1) |
版本0.7.8(19-ZN2) |
v0.7.8(19-ZN2) |
指令集: |
x64 AVX512-DQ |
x64 AVX512-DQ |
x64 AVX512-DQ |
x64 AVX512-DQ |
x64 AVX2+ADX |
x64 AVX2+ADX |
x64 AVX2+ADX |
25,000,000 |
0.540 |
0.329 |
0.294 |
0.283 |
0.534 |
0.439 |
0.513 |
50,000,000 |
0.981 |
0.683 |
0.617 |
0.544 |
1.027 |
0.838 |
0.920 |
100,000,000 |
1.905 |
1.456 |
1.305 |
1.169 |
2.298 |
1.796 |
1.887 |
250,000,000 |
5.085 |
3.737 |
3.591 |
3.125 |
5.854 |
4.509 |
4.650 |
500,000,000 |
10.372 |
7.750 |
7.293 |
6.309 |
10.502 |
8.196 |
8.066 |
1,000,000,000 |
21.217 |
16.550 |
15.041 |
13.042 |
17.836 |
14.252 |
13.246 |
2,500,000,000 |
55.701 |
45.693 |
39.329 |
34.028 |
35.485 |
30.592 |
27.011 |
5,000,000,000 |
118.151 |
99.078 |
83.601 |
71.777 |
62.432 |
58.405 |
49.940 |
10,000,000,000 |
247.928 |
212.984 |
176.695 |
153.169 |
115.543 |
116.900 |
98.156 |
25,000,000,000 |
|
599.653 |
491.988 |
425.442 |
307.995 |
314.907 |
258.081 |
50,000,000,000 |
|
|
1081.181美元 |
|
690.662 |
741.633 |
598.716 |
100,000,000,000 |
|
|
|
|
|
1715.123 |
1,370.714 |
250,000,000,000 |
|
|
|
|
|
|
3872.397 |
学分: |
雅各布·科尔曼 |
奥利弗·克鲁斯 |
纽亚历克斯 |
新余苗 |
卡斯滕·斯皮尔 |
格雷格·霍根 |
宋鹏飞 |
处理器: |
至强E5-2683 v3 |
至强E7-8880 v3 |
至强E5-2687W v4 |
至强E5-2686 v4 |
至强E5-2696 v4 |
Epyc 7601公司 |
Xeon黄金6130F |
生成: |
处理器 |
处理器 |
英特尔Broadwell |
英特尔Broadwell |
英特尔Broadwell |
AMD那不勒斯 |
英特尔天湖Purley |
插座/芯线/螺纹: |
2/28/56 |
128年4月64日 |
2/24/48 |
2/36/72 |
2/44/88 |
2/64/128 |
64年2月32日 |
处理器速度: |
2.03千兆赫 |
2.3千兆赫 |
3.0千兆赫 |
2.3千兆赫 |
2.2千兆赫 |
2.2千兆赫 |
2.1千兆赫 |
内存: |
128 GB-??? |
2 TB??? |
64 GB |
504 GB-??? |
768 GB-??? |
256 GB-?? |
256 GB-?? |
程序版本: |
v0.6.9(13-HSW) |
v0.7.1(13-HSW) |
v0.7.6(14-BDW) |
v0.7.7(14-BDW) |
v0.7.1(14-BDW) |
v0.7.3(17-ZN1) |
v0.7.3(17-SKX) |
指令集: |
x64 AVX2 |
x64 AVX2 |
x64 AVX2+ADX |
x64 AVX2+ADX |
x64 AVX2+ADX |
x64 AVX2+ADX |
x64 AVX512-DQ |
25,000,000 |
0.907 |
1.176 |
0.490 |
0.494 |
0.715 |
2.459 |
1.150 |
50,000,000 |
1.745 |
2.321 |
1.072 |
0.982 |
1.344 |
4.347 |
1.883 |
100,000,000 |
3.317 |
4.217 |
2.303 |
2.193 |
2.673 |
6.996 |
3.341 |
250,000,000 |
8.339 |
8.781 |
6.196 |
6.044 |
6.853 |
14.258 |
7.731 |
500,000,000 |
17.708 |
15.879 |
13.046 |
12.582 |
14.538 |
24.930 |
15.346 |
1,000,000,000 |
37.311 |
32.078 |
27.763 |
26.852 |
31.260 |
47.837 |
31.301 |
2,500,000,000 |
102.131 |
78.251 |
76.202 |
73.596 |
84.271 |
111.139 |
82.871 |
5,000,000,000 |
218.917 |
164.157 |
165.046 |
160.094 |
192.889 |
228.252 |
179.488 |
10,000,000,000 |
471.802 |
346.307 |
356.487 |
346.305 |
417.322 |
482.777 |
387.530 |
25,000,000,000 |
1,511.852 |
957.966 |
1,006.131 |
980.784 |
1,186.881 |
1,184.144 |
1,063.850 |
50,000,000,000 |
|
2,096.169 |
2,202.558 |
2,156.854 |
2,601.476 |
|
|
100,000,000,000 |
|
4,442.742 |
|
|
6,037.704 |
|
|
250,000,000,000 |
|
17,428.450 |
|
|
|
|
|
学分: |
近藤茂 |
雅各布·科尔曼 |
卡梅隆·吉斯布雷希特 |
纽亚历克斯 |
“悠悠” |
戴夫·格雷厄姆 |
最快时间:
每个尺码的完整排名表如下:
这些最快的时间可能包括未发布的beta。
有更快的时间吗?让我知道:a-yee@u.northwestern.edu
请注意,我通常不会回复这些电子邮件。我只是将它们放入我定期更新的图表中(通常在2周内)。
性能提示:
Pi的十进制数字-以秒为单位
内核i9 7940X@3.7 GHz AVX512 |
记忆频率: |
2666公吨/秒 |
3466公吨/秒 |
25,000,000 |
0.839 |
0.758 |
50,000,000 |
1.424 |
1.338 |
100,000,000 |
2.701 |
2.425 |
250,000,000 |
6.489 |
5.877 |
500,000,000 |
13.307 |
11.917 |
1,000,000,000 |
27.913 |
24.915 |
2,500,000,000 |
76.837 |
68.322 |
5,000,000,000 |
168.058 |
148.737 |
10,000,000,000 |
365.047 |
322.115 |
25,000,000,000 |
1,037.527 |
916.039 |
众所周知,高内核数的Skylake X处理器受到内存带宽的严重限制。
内存带宽:
由于计算Pi和其他常量的内存密集性,y-cruncher需要大量内存带宽才能正常运行。事实上,自2012年以来,几乎所有高端台式机上都明显存在该程序的内存限制,至少自2006年以来,大多数多插槽系统上都存在该程序。
建议:
- 确保填充了所有内存通道。这是迄今为止最重要的,因为带宽几乎与信道数成线性关系。
- 以尽可能高的频率运行内存,以最大化带宽。
- 记忆计时通常不那么重要。超线程可以很好地隐藏长内存延迟。
- 在Skylake X处理器上,L3缓存带宽也是一个瓶颈。因此,尽可能多地超频缓存。
如果y-cruncher暴露出其他应用程序和压力测试所没有的不稳定性,不要感到惊讶。y-cruncher的与众不同之处在于它同时给CPU和整个内存子系统带来了沉重的负载。
并行性能:
y-cruncher有很多调整并行性能的设置。默认情况下,它会尽力分析硬件并选择最佳设置。但是,由于处理器拓扑结构的组合几乎是无限的,y运算器很难为所有东西最佳地选择最佳设置。因此,有时只有手动设置才能实现最佳性能。
- 尝试Push Pool和Cilk Plus框架。虽然Push Pool在大多数情况下都更快,但Cilk Plus可能更适合于非常小的计算以及具有多个(>64)内核的机器*
- 尝试使用较大的任务分解大小。这可以缓解负载不平衡的问题*
- 在Windows上,如果系统有64个以上的逻辑内核,请确保在BIOS中禁用节点交错。否则,将导致处理器组不平衡,从而导致负载不平衡。
*如果您在控制台UI中使用基准选项,则无法更改这些高级设置。要更改它们,您需要从命令行运行基准模式或使用自定义计算菜单。
负载不平衡是y-cruncher中常见的故障问题。通常的原因是:
- 逻辑内核的数量不是二次幂。
- 堆芯不均匀。常见原因包括:
- 核心以不同的速度计时。
- 由于NUMA拓扑不平衡,内核可以访问不同数量的内存带宽。
- 核心是隐藏在虚拟机后面的不同代核心。
- CPU密集型后台进程正在干扰y-cruncher使用所有硬件的能力。这适用于所有形式的系统抖动。
大页面:
过去,大页面并不重要,但现在在后Spectre/Mealtdown世界中却很重要。缓解措施熔化漏洞y-cruncher的性能可能会显著下降(已观察到高达5%)。事实证明,打开大页面可以减轻这种减轻的代价。(意在双关语)
请参阅内存分配指南如何打开大页面。
交换模式:
这可能是y-cruncher中最复杂的功能之一。
- 阅读指南所以你知道如何使用它。
- 根据系统的CPU能力,您可能需要多个NVMe SSD或许多的硬盘驱动器以避免磁盘I/O瓶颈。
- 不要使用硬件或软件RAID。如果让y-cruncher单独管理每个驱动器,它通常会做得更好。
- 如果你关心SSD的寿命,就不要使用它们。y型压榨机能够并将摧毁SSD如果你坚持足够长的时间。
已知问题:
本节中的所有内容都正在重新验证并移至:https://github.com/Mysticial/y-cruncher/issues网站
性能问题:
- 在最新的Ubuntu(15.10)上进行交换计算,可能还有其他内核版本相同的东西,在交换模式下性能很差。这是因为操作系统对页面文件进行了过度和不必要的磁盘交换。解决方案是禁用交换文件,这样就不可能进行分页。将“交换”值设置为零也就足够了。y-cruncher还将尝试将页面锁定在内存中,以防止操作系统通过分页进行自拍。
算法和发展:
常见问题:
Pi和其他常数:
程序使用:
硬件和超时钟:
学术界:
编程:
其他:
链接:
以下是一些专门用于计算Pi和其他常数的有趣站点:
问题或评论
通过与我联系电子邮件。我回复得很好,除非它被学校的垃圾邮件过滤器捕获。
你也可以在推特上找到我@神秘的.