问题标签 [micro-architecture]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cpu-architecture - 为什么 FADDP D-form 在 Cortex-A72 上的吞吐量高于 FADDP Q-form
我一直在根据一个粗略的经验法则进行操作,如果您有足够的数据进行操作,Q-form ASIMD 指令与 D-form 一样好或更好。因此,在阅读Cortex-A72 软件优化指南的第 3.15 节时,我很惊讶地看到FADDP
,D 型的吞吐量为 2,Q 型的吞吐量为 2/3(作为参考,延迟分别为 4 和 7)。对于 D 和 Q 形式具有不同性能的所有其他指令在最坏的情况下只有很小的延迟差异(例如 3 对 4 FRINTX
),并且具有相同或正好一半的吞吐量。
有什么特别之处FADDP
在于它的吞吐量对于 Q-form 减少了三分之一,并且(如果你有前端带宽)你真的可以通过用两个 D-form 指令替换 Q-form 来增加吞吐量吗?
测试和基准测试:
我编写了几个 c++ 函数来尝试以两种方式锻炼 cortex-a72:
当使用 clang 和 -O3 编译时,它们会产生以下结果:
在我看来,那些主循环似乎没有找到任何技巧来避免计算,而且它只是一条直线 8 q-form faddp's vs 16 d-form。
使用 perf 进行基准测试时的结果如下:
这并没有完全达到文档建议的收益(q 实际上非常接近文档建议的 8192 * 8 faddp 应该采用的理论 98304 周期,d 必须遇到延迟问题,这并不令人惊讶,因为有0x400b4c 和 0x400b60 之间的依赖关系,它们之间只有 4 条指令)。但是,这些收益似乎暗示着 d-form 有一些优势。
x86-64 - 为什么循环从 Uop Cache 提供的 uops 过渡到 LSD 会导致分支未命中率激增?
所有基准测试均在 Icelake 或Whiskey Lake(在 Skylake Family 中)上运行。
概括
我看到一个奇怪的现象,当循环从耗尽Uop 缓存过渡到耗尽LSD(循环流检测器)时,分支未命中会出现峰值,这可能会导致严重的性能下降。我在 Icelake 和 Whiskey Lake 上测试了一个嵌套循环,其中外部循环具有足够大的主体 st 整个东西不适合LSD本身,但内部循环足够小以适合 LSD。
基本上一旦内部循环达到一些迭代计数解码似乎切换为idq.dsb_uops (Uop Cache)到lsd.uops (LSD) 并且此时分支未命中 (没有相应的分支跳转)导致严重的性能下降。注意:这似乎只发生在嵌套循环中。例如, Travis Down 的循环测试不会显示分支未命中的任何有意义的变化。AFAICT 这与循环从用尽 Uop Cache过渡到用尽LSD时有关。
问题
当循环从用尽 Uop 缓存转换为用尽LSD时会发生什么,从而导致 Branch Misses出现这种峰值?
有没有办法避免这种情况?
基准
这是我能想出的最小可重现示例:
注意:如果.p2align
删除语句,则两个循环都将适合 LSD,并且不会有转换。
编译:gcc -O3 -march=native -mtune=native <filename>.c -o <filename>
运行 Icelake:sudo perf stat -C 0 --all-user -e cycles -e branches -e branch-misses -x, -e idq.ms_uops -e idq.dsb_uops -e lsd.uops taskset -c 0 ./<filename> <N inner loop iterations>
运行威士忌湖:sudo perf stat -C 0 -e cycles -e branches -e branch-misses -x, -e idq.ms_uops -e idq.dsb_uops -e lsd.uops taskset -c 0 ./<filename> <N inner loop iterations>
图表
编辑:x 标签是内循环的 N 次迭代。
下面是Branch Misses、Branches和LSD Uops的图表。
一般可以看到 1) Branches中没有对应的跳转。2)增加的Branch Misses数量稳定在一个常数。3) Branch Misses和LSD Uops之间有很强的关系。
冰湖图:
威士忌湖图:
下面是 Icelake 的Branch Misses、Cycles和LSD Uops的图表 ,因为性能几乎没有受到以下影响:
分析
下面的硬数字。
对于Icelake,从LSD开始和N = 22
结束于_
_ _ _ 在此期间
, Cycles也增加了2倍。对于所有分支未命中保持在1.67 x 10^7左右(大约)。对于分支继续仅线性增加。N = 27
N > 27
outer_loop_N
N = [17, 40]
Whiskey Lake的结果看起来不同,因为 1)N
开始波动N = 35
并持续波动直到N = 49
。2) 对性能的影响较小,数据波动较大。话虽如此,与从由Uop Cache提供的 uops到由LSD提供的转换相对应的Branch-Misses的增加仍然存在。
结果
数据是 25 次运行的平均结果。
冰湖结果:
ñ | 循环 | 分支机构 | 分支未命中 | idq.ms_uops | idq.dsb_uops | lsd.uops |
---|---|---|---|---|---|---|
1 | 33893260 | 67129521 | 1590 | 43163 | 115243 | 83908732 |
2 | 42540891 | 83908928 | 1762 | 49023 | 142909 | 100690381 |
3 | 50725933 | 100686143 | 1782 | 47656 | 142506 | 117440256 |
4 | 67533597 | 117461172 | 1655 | 52538 | 186123 | 134158311 |
5 | 68022910 | 134238387 | 1711 | 53405 | 204481 | 150954035 |
6 | 85543126 | 151018722 | 1924年 | 62445 | 141397 | 167633971 |
7 | 84847823 | 167799220 | 1935年 | 60248 | 160146 | 184563523 |
8 | 101532158 | 184570060 | 1709 | 60064 | 361208 | 201100179 |
9 | 101864898 | 201347253 | 1773 | 63827 | 459873 | 217780207 |
10 | 118024033 | 218124499 | 1698 | 59480 | 177223 | 234834304 |
11 | 118644416 | 234908571 | 2201 | 62514 | 422977 | 251503052 |
12 | 134627567 | 251678909 | 1679 | 57262 | 133462 | 268435650 |
13 | 285607942 | 268456135 | 1770 | 74070 | 285032524 | 315423 |
14 | 302717754 | 285233352 | 1731 | 74663 | 302101097 | 15953 |
15 | 321627434 | 302010569 | 81796 | 77831 | 319192830 | 1520819 |
16 | 337876736 | 318787786 | 71638 | 77056 | 335904260 | 1265766 |
17 | 353054773 | 335565563 | 1798 | 79839 | 352434780 | 15879 |
18 | 369800279 | 352344970 | 1978年 | 79863 | 369229396 | 16790 |
19 | 386921048 | 369119438 | 1972年 | 84075 | 385984022 | 16115 |
20 | 404248461 | 385896655 | 29454 | 85348 | 402790977 | 510176 |
21 | 421100725 | 402673872 | 37598 | 83400 | 419537730 | 729397 |
22 | 519623794 | 419451095 | 4447767 | 91209 | 431865775 | 97827331 |
23 | 702206338 | 436228323 | 12603617 | 109064 | 427880075 | 327661987 |
24 | 710626194 | 453005538 | 12316933 | 106929 | 432926173 | 344838509 |
25 | 863214037 | 469782765 | 14641887 | 121776 | 428085132 | 614871430 |
26 | 761037251 | 486559974 | 13067814 | 113011 | 438093034 | 418124984 |
27 | 832686921 | 503337195 | 16381350 | 113953 | 421924080 | 556915419 |
28 | 854713119 | 520114412 | 16642396 | 124448 | 420515666 | 598907353 |
29 | 869873144 | 536891629 | 16572581 | 119280 | 421188631 | 629696780 |
30 | 889642335 | 553668847 | 16717446 | 120116 | 420086570 | 668628871 |
31 | 906912275 | 570446064 | 16735759 | 126094 | 419970933 | 702822733 |
32 | 923023862 | 587223281 | 16706519 | 132498 | 420332680 | 735003892 |
33 | 940308170 | 604000498 | 16744992 | 124365 | 419945191 | 770185745 |
34 | 957075000 | 620777716 | 16726856 | 133675 | 420215897 | 802779119 |
35 | 974557538 | 637554932 | 16763071 | 134871 | 419764866 | 838012637 |
36 | 991110971 | 654332149 | 16772560 | 130903 | 419641144 | 872037131 |
37 | 1008489575 | 671109367 | 16757219 | 138788 | 419900997 | 904638287 |
38 | 1024971256 | 687886583 | 16772585 | 139782 | 419663863 | 938988917 |
39 | 1041404669 | 704669411 | 16776722 | 137681 | 419617131 | 972896126 |
40 | 1058594326 | 721441018 | 16773492 | 142959 | 419662133 | 1006109192 |
41 | 1075179100 | 738218235 | 16776636 | 141185 | 419601996 | 1039892900 |
42 | 1092093726 | 754995452 | 16776233 | 142793 | 419611902 | 1073373451 |
43 | 1108706464 | 771773224 | 16776359 | 139500 | 419610885 | 1106976114 |
44 | 1125413652 | 788549886 | 16764637 | 143717 | 419889127 | 1139628280 |
45 | 1142023614 | 805327103 | 16778640 | 144397 | 419558217 | 1174329696 |
46 | 1158833317 | 822104321 | 16765518 | 148045 | 419889914 | 1206833484 |
47 | 1175665684 | 838881537 | 16778437 | 148347 | 419562885 | 1241397845 |
48 | 1192454164 | 855658755 | 16778865 | 153651 | 419552747 | 1275006511 |
49 | 1210199084 | 872436025 | 16778287 | 152468 | 419599314 | 1307945613 |
50 | 1226321832 | 889213188 | 16778464 | 155552 | 419572344 | 1341893668 |
51 | 1242886388 | 905990406 | 16778745 | 155401 | 419559249 | 1375589883 |
52 | 1259559053 | 922767623 | 16778809 | 154847 | 419554082 | 1409206082 |
53 | 1276875799 | 939544839 | 16778460 | 162521 | 419576455 | 1442424993 |
54 | 1293113199 | 956322057 | 16778931 | 154913 | 419550955 | 1476316161 |
55 | 1310449232 | 973099274 | 16778534 | 157364 | 419578102 | 1509485876 |
56 | 1327022109 | 989876491 | 16778794 | 162881 | 419562403 | 1543193559 |
57 | 1344097516 | 1006653708 | 16778906 | 157486 | 419567545 | 1576414302 |
58 | 1362935064 | 1023430928 | 16778959 | 315120 | 419583132 | 1609691339 |
59 | 1381567560 | 1040208143 | 16778564 | 179997 | 419661259 | 1640660745 |
60 | 1394829416 | 1056985359 | 16778779 | 167613 | 419575969 | 1677034188 |
61 | 1411847237 | 1073762626 | 16778071 | 166332 | 419613028 | 1710194702 |
62 | 1428918439 | 1090539795 | 16778409 | 168073 | 419610487 | 1743644637 |
63 | 1445223241 | 1107317011 | 16778486 | 172446 | 419591254 | 1777573503 |
64 | 1461530579 | 1124094228 | 16769606 | 169559 | 419970612 | 1810351736 |
威士忌湖结果:
ñ | 循环 | 分支机构 | 分支未命中 | idq.dsb_uops | lsd.uops |
---|---|---|---|---|---|
1 | 8332553879 | 35005847 | 37925 | 1799462 | 6019 |
2 | 8329926329 | 51163346 | 34338 | 1114352 | 5919 |
3 | 8357233041 | 67925775 | 32270 | 9241935 | 5555 |
4 | 8379609449 | 85364250 | 35667 | 18215077 | 5712 |
5 | 8394301337 | 101563554 | 33177 | 26392216 | 2159 |
6 | 8409830612 | 118918934 | 35007 | 35318763 | 5295 |
7 | 8435794672 | 135162597 | 35592 | 43033739 | 4478 |
8 | 8445843118 | 152636271 | 37802 | 52154850 | 5629 |
9 | 8459141676 | 168577876 | 30766 | 59245754 | 1543 |
10 | 8475484632 | 185354280 | 30825 | 68059212 | 4672 |
11 | 8493529857 | 202489273 | 31703 | 77386249 | 5556 |
12 | 8509281533 | 218912407 | 32133 | 84390084 | 4399 |
13 | 8528605921 | 236303681 | 33056 | 93995496 | 2093 |
14 | 8553971099 | 252439989 | 572416 | 99700289 | 2477 |
15 | 8558526147 | 269148605 | 29912 | 109772044 | 6121 |
16 | 8576658106 | 286414453 | 29839 | 118504526 | 5850 |
17 | 8591545887 | 302698593 | 28993 | 126409458 | 4865 |
18 | 8611628234 | 319960954 | 32568 | 136298306 | 5066 |
19 | 8627289083 | 336312187 | 30094 | 143759724 | 6598 |
20 | 8644741581 | 353730396 | 49458 | 152217853 | 9275 |
21 | 8685908403 | 369886284 | 1175195 | 161313923 | 7958903 |
22 | 8694494654 | 387336207 | 354008 | 169541244 | 2553802 |
23 | 8702920906 | 403389097 | 29315 | 176524452 | 12932 |
24 | 8711458401 | 420211718 | 31924 | 184984842 | 11574 |
25 | 8729941722 | 437299615 | 32472 | 194553843 | 12002 |
26 | 8743658904 | 453739403 | 28809 | 202074676 | 13279 |
27 | 8763317458 | 470902005 | 32298 | 211321630 | 15377 |
28 | 8788189716 | 487432842 | 37105 | 218972477 | 27666 |
29 | 8796580152 | 504414945 | 36756 | 228334744 | 79954 |
30 | 8821174857 | 520930989 | 39550 | 235849655 | 140461 |
31 | 8818857058 | 537611096 | 34142 | 648080 | 79191 |
32 | 8855038758 | 555138781 | 37680 | 18414880 | 70489 |
33 | 8870680446 | 571194669 | 37541 | 34596108 | 131455 |
34 | 8888946679 | 588222521 | 33724 | 52553756 | 80009 |
35 | 9256640352 | 604791887 | 16658672 | 132185723 | 41881719 |
36 | 9189040776 | 621918353 | 12296238 | 257921026 | 235389707 |
37 | 8962737456 | 638241888 | 1086663 | 109613368 | 35222987 |
38 | 9005853511 | 655453884 | 2059624 | 131945369 | 73389550 |
39 | 9005576553 | 671845678 | 1434478 | 143002441 | 51959363 |
40 | 9284680907 | 688991063 | 12776341 | 349762585 | 347998221 |
41 | 9049931865 | 705399210 | 1778532 | 174597773 | 72566933 |
42 | 9314836359 | 722226758 | 12743442 | 365270833 | 380415682 |
43 | 9072200927 | 739449289 | 1344663 | 205181163 | 61284843 |
44 | 9346737669 | 755766179 | 12681859 | 383580355 | 409359111 |
45 | 9117099955 | 773167996 | 1801713 | 235583664 | 88985013 |
46 | 9108062783 | 789247474 | 860680 | 250992592 | 43508069 |
47 | 9129892784 | 806871038 | 984804 | 268229102 | 51249366 |
48 | 9146468279 | 822765997 | 1018387 | 282312588 | 58278399 |
49 | 9476835578 | 840085058 | 13985421 | 241172394 | 809315446 |
50 | 9495578885 | 856579327 | 14155046 | 241909464 | 847629148 |
51 | 9537115189 | 873483093 | 15057500 | 238735335 | 932663942 |
52 | 9556102594 | 890026435 | 15322279 | 238194482 | 982429654 |
53 | 9589094741 | 907142375 | 15899251 | 234845868 | 1052080437 |
54 | 9609053333 | 923477989 | 16049518 | 233890599 | 1092323040 |
55 | 9628950166 | 940997348 | 16172619 | 235383688 | 1131146866 |
56 | 9650657175 | 957049360 | 16445697 | 231276680 | 1183699383 |
57 | 9666446210 | 973785857 | 16330748 | 233203869 | 1205098118 |
58 | 9687274222 | 990692518 | 16523542 | 230842647 | 1254624242 |
59 | 9706652879 | 1007946602 | 16576268 | 231502185 | 1288374980 |
60 | 9720091630 | 1024044005 | 16547047 | 230966608 | 1321807705 |
61 | 9741079017 | 1041285110 | 16635400 | 230873663 | 1362929599 |
62 | 9761596587 | 1057847755 | 16683756 | 230289842 | 1399235989 |
63 | 9782104875 | 1075055403 | 16299138 | 237386812 | 1397167324 |
64 | 9790122724 | 1091147494 | 16650471 | 229928585 | 1463076072 |
编辑:值得注意的两件事:
如果我在内部循环中添加填充,使其不适合 uop 缓存,我直到 150 次迭代才会看到这种行为。
lfence
在外循环中添加一个带有填充的 on 会将 N 阈值更改为 31。
edit2:清除分支历史的基准条件被颠倒了。应该cmove
不是cmovne
。对于固定版本,任何迭代计数都会以与上述相同的速率 (1.67 * 10^9)看到升高的分支未命中率。这意味着LSD本身不会导致Branch Misses,但留下了LSD以某种方式击败Branch Predictor的可能性(我认为是这种情况)。
mips - MIPS ISA 中使用的微架构是什么?
我相信 MIPS 微处理器中使用的微架构是流水线,但我可能错了?
提前感谢您的回答!
memory - 设置 NUMA 如何影响系统的性能?
- 系统如何感知 NUMA=4 和 NUMA=0(Interleaved memory)?
- 从应用程序的角度来看,性能如何受到影响?
- 在内核之间(或在 NUMA 节点之间)共享数据是否会对 NUMA=4 和 NUMA=0 产生影响?
- 为什么不能在运行时更改 NUMA?为什么它是引导选项?谢谢,
architecture - 你能在 gem5 上模拟勒索软件吗?
我希望在 gem5 上模拟勒索软件,以基本上执行微架构分析。我想模拟一个环境,勒索软件在受害者的计算机上查找文件,然后对其进行加密。如果可能的话,我还想模拟屏幕锁勒索软件,但文件加密是我的首要任务。我研究过其他模拟环境,例如 Cuckoo Sandbox,但我是勒索软件领域的新手,我不确定这些类型的沙盒软件是否可以帮助我分析指令模式、内存访问模式、调整调度程序等。所以,在总结一下,我基本上是在寻找分析勒索软件对微架构影响的方法。任何帮助表示赞赏。谢谢。
assembly - 基于索引寻址模式内存总和
我有一条指令:ADD [BX][SI] + 5FFDH, EABFH
我想知道它是如何在 8086 微处理器上运行的。我已经意识到这条指令ADD [BX][SI] + 5FFDH, EABFH
以这种方式工作:
- 2 个字节的数据从数据总线到达并进入指令队列。
- 指令队列中可用的数据进入指令解码器。
- 另外 2 个字节的数据从数据总线到达并进入指令队列。
- BX 和 SI 值进入 ALU 并计算
BX + SI
- 另外 2 个字节的数据从数据总线到达并进入指令队列。
BX + SI
转到 ALU 的输入。5FFDH
从指令队列中弹出并进入 ALU 的输入。- ALU 计算
BX + SI + 5FFDH
。 BX + SI + 5FFDH
通过地址总线进入内存。BX + SI + 5FFDH
的值来自内存并进入 ALU 的输入。EABFH
从指令队列中弹出并进入 ALU 的输入。[BX + SI + 5FFDH] + EABFH
通过 ALU 计算。- ??????????
所以我的问题是在第 13 步。微处理器如何知道内存地址 ( BX + SI + 5FFDH
)[BX + SI + 5FFDH] + EABFH
根据空指令队列将 的值发送到内存,我们无法BX + SI + 5FFDH
再次计算。
assembly - 我如何获取我的计算机的 cpu 信息,即功能单元/延迟等
我正在尝试学习组装,在我正在阅读的书中,我遇到了教科书表格中显示的功能单元及其延迟。
我想知道我的 CPU 的功能单元是什么,延迟是多少?整数加法、整数乘法、单精度加法、单精度乘法和双精度乘法。
我查看了这些链接: https ://www.amd.com/en/technologies/zen-core-3 https://en.wikichip.org/wiki/amd/microarchitectures/zen_3
但找不到有关我的处理器中的功能单元或其延迟的任何信息。
书中的延迟表示例:
英特尔酷睿 i7 Haswell 的功能单元信息示例:
任何帮助表示赞赏,谢谢!:)
c++ - Can programs use (significantly) less memory when compiled for different processors?
I have a C++ program I'm compiling for AMD64. Of course, different processors, despite being AMD64, support different features and instructions because they implement different microarchitectures. An easy way to optimise the program for one's own machine is to just use -march=native
in Clang or GCC, but this isn't very portable for distribution's sake. A more portable solution would be to pick and choose specific target features.
This obviously affects performance (some processors support AVX-512, some don't, some support AVX2, some don't, etc.), but can this affect memory usage (heap/stack, not code size) in any significant way?
c++ - icc:在更改代码的不同且独立部分的同时增加运行时间
我有一个奇怪的问题,也许你们中的一个人知道那里发生了什么。
我正在处理的代码是一个冗长而复杂的模拟代码。我有一个函数 matrixSetup ,它在开始时被调用并且我在其中测量运行时间。在设置了我的矩阵并做了很多其他事情之后,我正在运行我的求解器等等。
现在我在求解器代码上进行了一些更改,这不应该影响矩阵设置的运行时间。但是,我看到那里从 90 秒增加到 150 秒。无需触及那段代码。为什么?如何?
这个时间差是完全可重现的。撤消求解器中的更改会返回快速矩阵设置。在求解器中进行其他更改可能会也可能不会导致运行时间的相同增加,所有这些都是可重现的。运行是在一个空的计算节点上以隔离的方式进行的,因此不会受到那里的影响。
当使用 vTune 找出运行时间增加的地方时,我最终得到了一个简单的循环(在循环嵌套中):
有人知道那里发生了什么吗?编译器生成的指令与 vTune 完全相同。我正在使用 Intel 编译器,版本 19.0.1。
我正在玩一些编译器标志。当声明 -fpic (确定编译器是否生成与位置无关的代码)时,运行时的增加消失了。但我认为,这会导致指令略有不同,因此并不能解决我面临的真正问题。
使用 Clang,我看不到(至少在这里)这种行为......
关于增加运行时间的原因有什么想法吗?我很好奇...
干杯迈克尔
next.js - 如何在微应用上下文中集中哨兵配置文件?
我目前正在构建一个应用程序,该应用程序具有多个带有 nextJS 的微应用程序,每个应用程序都具有哨兵集成。
我已将我的哨兵配置集中在所有应用程序使用的专用库中,但在微应用程序构建期间,这两个文件sentry.client.config.js
和sentry.server.config.js
内容如下:
我宁愿避免在我的所有微应用中复制粘贴相同的文件。
有没有办法直接将参数传递给哨兵,而无需在任何不同的微应用中拥有这两个文件。