現代CPU的浮點計算速度為什麼這麼快?

時間 2021-05-31 22:30:46

1樓:Bluebear

Inst 327 X86 : IMUL r16, r16L: 1.17ns= 2.3c T: 0.39ns= 0.78c

Inst 328 X86 : IMUL r32, r32L: 1.09ns= 2.2c T: 0.39ns= 0.78c

Inst 329 AMD64 : IMUL r64, r64L: 1.17ns= 2.3c T: 0.39ns= 0.78c

Inst 330 X86 : IMUL r16, r16, imm8L: 1.55ns= 3.1c T: 0.39ns= 0.78c

Inst 331 X86 : IMUL r32, r32, imm8L: 1.17ns= 2.3c T: 0.39ns= 0.78c

Inst 332 AMD64 : IMUL r64, r64, imm8L: 1.17ns= 2.3c T: 0.39ns= 0.78c

Inst 333 X86 : IMUL r16, r16, imm16L: 1.55ns= 3.1c T: 1.17ns= 2.33c

Inst 334 X86 : IMUL r32, r32, imm32L: 1.17ns= 2.3c T: 0.40ns= 0.81c

Inst 335 AMD64 : IMUL r64, r64, imm32L: 1.17ns= 2.3c T: 0.43ns= 0.86c

Inst 336 X86 : IMUL r8 (ahL: 1.55ns= 3.1c T: 1.25ns= 2.50c

Inst 337 X86 : IMUL r16 (dxL: 1.92ns= 3.8c T: 1.50ns= 3.00c

Inst 338 X86 : IMUL r32 (edxL: 1.67ns= 3.3c T: 1.67ns= 3.33c

Inst 339 AMD64 : IMUL r64 (rdxL: 1.42ns= 2.8c T: 1.17ns= 2.33c

Inst 340 X86 : MUL r8 (ahL: 1.55ns= 3.1c T: 1.13ns= 2.25c

Inst 341 X86 : MUL r16 (dxL: 1.80ns= 3.6c T: 1.63ns= 3.25c

Inst 342 X86 : MUL r32 (edxL: 1.80ns= 3.6c T: 1.75ns= 3.50c

Inst 343 AMD64 : MUL r64 (rdxL: 1.55ns= 3.1c T: 1.17ns= 2.33c

Inst 344 X86 : IMUL r8 (alL: 1.17ns= 2.3c T: 1.17ns= 2.33c

Inst 345 X86 : IMUL r16 (axL: 1.50ns= 3.0c T: 1.50ns= 3.00c

Inst 346 X86 : IMUL r32 (eaxL: 1.75ns= 3.5c T: 1.71ns= 3.42c

Inst 347 AMD64 : IMUL r64 (raxL: 1.13ns= 2.3c T: 1.13ns= 2.25c

Inst 348 X86 : MUL r8 (alL: 1.17ns= 2.3c T: 1.17ns= 2.33c

Inst 349 X86 : MUL r16 (axL: 1.42ns= 2.8c T: 1.42ns= 2.83c

Inst 350 X86 : MUL r32 (eaxL: 1.59ns= 3.2c T: 1.59ns= 3.17c

Inst 351 AMD64 : MUL r64 (raxL: 1.17ns= 2.3c T: 1.17ns= 2.33c

Inst 352 X86 : IDIV r8 14/ 7b (fullL: 8.23ns= 16.4c T: 8.23ns= 16.42c

Inst 353 X86 : IDIV r8 12/ 7b ax upd L: 7.

89ns= 15.8c T: 7.

89ns= 15.75c

Inst 354 X86 : IDIV r8 7/ 7b ax upd L: 9.

31ns= 18.6c T: 8.

85ns= 17.67c

Inst 355 X86 : IDIV r8 4/ 7b ax upd L: [no true dep.

] T: 7.85ns= 15.

67cInst 356 X86 : IDIV r8 0/ 7bL: [no true dep.] T: 7.39ns= 14.75c

Inst 357 X86 : IDIV r8 11/ 4b ax upd L: 7.

64ns= 15.3c T: 7.

64ns= 15.25c

Inst 358 X86 : IDIV r8 8/ 4b ax upd L: [no true dep.

] T: 7.52ns= 15.

00cInst 359 X86 : IDIV r8 4/ 4b ax upd L: 8.

65ns= 17.3c T: 8.

65ns= 17.25c

Inst 360 X86 : IDIV r8 0/ 4bL: [no true dep.] T: 7.52ns= 15.00c

Inst 361 X86 : IDIV r8 2^12/2^6 ax upd L: [no true dep.

] T: 7.94ns= 15.

83cInst 362 X86 : IDIV r8 1/1L: 7.27ns= 14.5c T: 7.27ns= 14.50c

Inst 363 X86 : IDIV r8 1/1 ax updL: 8.14ns= 16.3c T: 7.85ns= 15.67c

Inst 364 X86 : IDIV r16 30/15b (full) L: 8.

52ns= 17.0c T: 8.

52ns= 17.00c

Inst 365 X86 : IDIV r16 24/15b ax upd L: 8.

69ns= 17.3c T: 8.

69ns= 17.33c

Inst 366 X86 : IDIV r16 15/15b ax upd L: 8.

65ns= 17.3c T: 8.

65ns= 17.25c

Inst 367 X86 : IDIV r16 8/15b ax/dx upd L: [no true dep.

] T: 8.35ns= 16.

67cInst 368 X86 : IDIV r16 0/15bL: [no true dep.] T: 7.64ns= 15.25c

Inst 369 X86 : IDIV r16 23/ 8b ax upd L: 8.

60ns= 17.2c T: 8.

60ns= 17.17c

Inst 370 X86 : IDIV r16 16/ 8b ax upd L: [no true dep.

] T: 9.10ns= 18.

17cInst 371 X86 : IDIV r16 8/ 8b ax upd L: 9.

06ns= 18.1c T: 9.

02ns= 18.00c

Inst 372 X86 : IDIV r16 0/ 8bL: [no true dep.] T: 7.68ns= 15.33c

Inst 373 X86 : IDIV r16 2^28/2^14 ax/dx L: [no true dep.

] T: 9.90ns= 19.

75cInst 374 X86 : IDIV r16 1/1L: 7.43ns= 14.8c T: 7.43ns= 14.83c

Inst 375 X86 : IDIV r16 1/1 ax updL: 8.02ns= 16.0c T: 7.81ns= 15.58c

Inst 376 X86 : IDIV r16 1/1 ax/dx upd L: 8.

31ns= 16.6c T: 8.

31ns= 16.58c

Inst 377 X86 : IDIV r32 62/31b (full) L: 9.

48ns= 18.9c T: 9.

48ns= 18.92c

Inst 378 X86 : IDIV r32 62/31b 0 rem. L:

10.11ns= 20.2c T:

10.11ns= 20.17c

Inst 379 X86 : IDIV r32 48/31b eax upd L: 8.

52ns= 17.0c T: 8.

52ns= 17.00c

Inst 380 X86 : IDIV r32 31/31b eax upd L: 7.

93ns= 15.8c T: 7.

93ns= 15.83c

Inst 381 X86 : IDIV r32 16/31b eax/edx L: [no true dep.

] T: 4.09ns= 8.

17cInst 382 X86 : IDIV r32 0/31bL: [no true dep.] T: 6.72ns= 13.42c

Inst 383 X86 : IDIV r32 47/16b eax upd L: 9.

73ns= 19.4c T: 9.

73ns= 19.42c

Inst 384 X86 : IDIV r32 32/16b eax upd L: [no true dep.

] T: 8.81ns= 17.

58cInst 385 X86 : IDIV r32 16/16b eax upd L: 8.

44ns= 16.8c T: 8.

44ns= 16.83c

Inst 386 X86 : IDIV r32 0/16bL: [no true dep.] T: 7.23ns= 14.42c

Inst 387 X86 : IDIV r32 2^60/2^30 eax/edx L: [no true dep.

] T: 6.35ns= 12.

67cInst 388 X86 : IDIV r32 1/1L: 7.14ns= 14.3c T: 7.14ns= 14.25c

Inst 389 X86 : IDIV r32 1/1 eax updL: 6.85ns= 13.7c T: 6.85ns= 13.67c

Inst 390 X86 : IDIV r32 1/1 eax/edx upd L: 4.

26ns= 8.5c T: 4.

26ns= 8.50c

Inst 391 AMD64 : IDIV r64 126/63b (full) L: 37.

75ns= 75.3c T: 37.

75ns= 75.33c

Inst 392 AMD64 : IDIV r64 126/63b 0 rem. L:

37.50ns= 74.8c T:

37.50ns= 74.83c

Inst 393 AMD64 : IDIV r64 96/63b rax upd L: 33.

96ns= 67.8c T: 33.

96ns= 67.75c

Inst 394 AMD64 : IDIV r64 63/63b rax upd L: 15.

16ns= 30.3c T: 15.

16ns= 30.25c

Inst 395 AMD64 : IDIV r64 32/63b rax/rdx L: [no true dep.

] T: 9.69ns= 19.

33cInst 396 AMD64 : IDIV r64 0/63bL: [no true dep.] T: 15.41ns= 30.75c

Inst 397 AMD64 : IDIV r64 95/32b rax upd L: 37.

30ns= 74.4c T: 37.

30ns= 74.42c

Inst 398 AMD64 : IDIV r64 64/32b rax upd L: [no true dep.

] T: 16.96ns= 33.

83cInst 399 AMD64 : IDIV r64 32/32b rax upd L: 15.

24ns= 30.4c T: 15.

08ns= 30.08c

Inst 400 AMD64 : IDIV r64 0/32bL: [no true dep.] T: 14.87ns= 29.67c

Inst 401 AMD64 : IDIV r64 2^124/2^62 rax/rdx L: [no true dep.

] T: 32.74ns= 65.

33cInst 402 AMD64 : IDIV r64 1/1L: 14.66ns= 29.3c T: 14.66ns= 29.25c

Inst 403 AMD64 : IDIV r64 1/1 rax updL: 13.28ns= 26.5c T: 13.28ns= 26.50c

Inst 404 AMD64 : IDIV r64 1/1 rax/rdx upd L: 9.

61ns= 19.2c T: 9.

61ns= 19.17c

Inst 405 X86 : DIV r8 16/ 8b (fullL: 8.23ns= 16.4c T: 8.23ns= 16.42c

Inst 406 X86 : DIV r8 12/ 8b ax updL: 7.85ns= 15.7c T: 7.39ns= 14.75c

Inst 407 X86 : DIV r8 8/ 8b ax updL: 8.56ns= 17.1c T: 8.56ns= 17.08c

Inst 408 X86 : DIV r8 4/ 8b ax updL: [no true dep.] T: 7.06ns= 14.08c

Inst 409 X86 : DIV r8 0/ 8bL: [no true dep.] T: 7.02ns= 14.00c

Inst 410 X86 : DIV r8 12/ 4b ax updL: 7.85ns= 15.7c T: 7.10ns= 14.17c

Inst 411 X86 : DIV r8 8/ 4b ax updL: [no true dep.] T: 7.60ns= 15.17c

Inst 412 X86 : DIV r8 4/ 4b ax updL: 8.73ns= 17.4c T: 8.52ns= 17.00c

Inst 413 X86 : DIV r8 0/ 4bL: [no true dep.] T: 6.72ns= 13.42c

Inst 414 X86 : DIV r8 2^14/2^7 ax upd L: [no true dep.

] T: 6.97ns= 13.

92cInst 415 X86 : DIV r8 1/1L: 7.10ns= 14.2c T: 6.68ns= 13.33c

Inst 416 X86 : DIV r8 1/1 ax updL: 7.73ns= 15.4c T: 7.10ns= 14.17c

Inst 417 X86 : DIV r16 32/16b (fullL: 9.02ns= 18.0c T: 9.02ns= 18.00c

Inst 418 X86 : DIV r16 30/15b 0 remL: 8.94ns= 17.8c T: 8.94ns= 17.83c

Inst 419 X86 : DIV r16 24/16b ax upd L: 8.

85ns= 17.7c T: 8.

85ns= 17.67c

Inst 420 X86 : DIV r16 16/16b ax upd L: 9.

10ns= 18.2c T: 8.

23ns= 16.42c

Inst 421 X86 : DIV r16 8/16b ax/dx upd L: [no true dep.

] T: 8.02ns= 16.

00cInst 422 X86 : DIV r16 0/16bL: [no true dep.] T: 7.85ns= 15.67c

Inst 423 X86 : DIV r16 24/ 8b ax upd L: 8.

98ns= 17.9c T: 8.

98ns= 17.92c

Inst 424 X86 : DIV r16 16/ 8b ax upd L: [no true dep.

] T: 8.77ns= 17.

50cInst 425 X86 : DIV r16 8/ 8b ax upd L: 8.

98ns= 17.9c T: 8.

98ns= 17.92c

Inst 426 X86 : DIV r16 0/ 8bL: [no true dep.] T: 7.68ns= 15.33c

Inst 427 X86 : DIV r16 1/1L: 7.85ns= 15.7c T: 7.85ns= 15.67c

Inst 428 X86 : DIV r16 1/1 ax updL: 7.98ns= 15.9c T: 7.94ns= 15.83c

Inst 429 X86 : DIV r16 1/1 ax/dx upd L: 8.

52ns= 17.0c T: 8.

23ns= 16.42c

Inst 430 X86 : DIV r32 64/32b (fullL: 9.44ns= 18.8c T: 9.44ns= 18.83c

Inst 431 X86 : DIV r32 62/31b 0 remL: 9.69ns= 19.3c T: 9.69ns= 19.33c

Inst 432 X86 : DIV r32 48/32b eax upd L: 8.

52ns= 17.0c T: 8.

52ns= 17.00c

Inst 433 X86 : DIV r32 32/32b eax upd L: 7.

89ns= 15.8c T: 7.

89ns= 15.75c

Inst 434 X86 : DIV r32 16/32b eax/edx L: [no true dep.

] T: 3.55ns= 7.

08cInst 435 X86 : DIV r32 0/32bL: [no true dep.] T: 7.60ns= 15.17c

Inst 436 X86 : DIV r32 48/16b eax upd L: 9.

44ns= 18.8c T: 9.

23ns= 18.42c

Inst 437 X86 : DIV r32 32/16b eax upd L: [no true dep.

] T: 8.10ns= 16.

17cInst 438 X86 : DIV r32 16/16b eax upd L: 8.

27ns= 16.5c T: 7.

89ns= 15.75c

Inst 439 X86 : DIV r32 0/16bL: [no true dep.] T: 7.77ns= 15.50c

Inst 440 X86 : DIV r32 2^62/2^31 eax/edx L: [no true dep.

] T: 6.89ns= 13.

75cInst 441 X86 : DIV r32 1/1L: 7.48ns= 14.9c T: 7.31ns= 14.58c

Inst 442 X86 : DIV r32 1/1 eax updL: 7.31ns= 14.6c T: 7.31ns= 14.58c

Inst 443 X86 : DIV r32 1/1 eax/edx upd L: 3.

93ns= 7.8c T: 3.

93ns= 7.83c

Inst 444 AMD64 : DIV r64 128/64b (full) L: 33.

91ns= 67.7c T: 33.

91ns= 67.67c

Inst 445 AMD64 : DIV r64 126/63b 0 rem. L:

35.92ns= 71.7c T:

35.00ns= 69.83c

Inst 446 AMD64 : DIV r64 96/64b rax upd L: 28.

57ns= 57.0c T: 28.

57ns= 57.00c

Inst 447 AMD64 : DIV r64 64/64b rax upd L: 8.

27ns= 16.5c T: 8.

14ns= 16.25c

Inst 448 AMD64 : DIV r64 32/64b rax/rdx L: [no true dep.

] T: 8.52ns= 17.

00cInst 449 AMD64 : DIV r64 0/64bL: [no true dep.] T: 11.07ns= 22.08c

Inst 450 AMD64 : DIV r64 96/32b rax upd L: 27.

19ns= 54.3c T: 27.

19ns= 54.25c

Inst 451 AMD64 : DIV r64 64/32b rax upd L: [no true dep.

] T: 8.64ns= 17.

25cInst 452 AMD64 : DIV r64 32/32b rax upd L: 8.

14ns= 16.3c T: 8.

14ns= 16.25c

Inst 453 AMD64 : DIV r64 0/32bL: [no true dep.] T: 11.19ns= 22.33c

Inst 454 AMD64 : DIV r64 2^126/2^63 rax/rdx L: [no true dep.

] T: 29.57ns= 59.

00cInst 455 AMD64 : DIV r64 1/1L: 11.32ns= 22.6c T: 10.98ns= 21.92c

Inst 456 AMD64 : DIV r64 1/1 rax updL: 8.60ns= 17.2c T: 8.44ns= 16.83c

Inst 457 AMD64 : DIV r64 1/1 rax/rdx upd L: 7.

98ns= 15.9c T: 7.

98ns= 15.92c

Inst 579 X87 : FMUL st(i), st (st = 0.0) L:

1.75ns= 3.5c T:

0.39ns= 0.78c

Inst 580 X87 : FMUL st(i), stL: 1.71ns= 3.4c T: 0.14ns= 0.28c

Inst 581 X87 : FMUL st, st(i), FXCH st(i) L: 1.

75ns= 3.5c T: 0.

17ns= 0.35c

Inst 582 X87 : FMUL + FADD st, st(iL: 3.09ns= 6.2c T: [not enough reg]

Inst 583 X87 : FMUL st(2i) FADD st(2i+1) L: 1.

80ns= 3.6c T: [not enough reg]

Inst 584 X87 : FDIV32 st(i), stL: 4.97ns= 9.9c T: 4.93ns= 9.83c

Inst 585 X87 : FDIV64 st(i), stL: 7.64ns= 15.3c T: 8.02ns= 16.00c

Inst 586 X87 : FDIV80 st(i), stL: 8.31ns= 16.6c T: 8.94ns= 17.83c

Inst 587 X87 : FDIV80 (0.0l/xL: 3.55ns= 7.1c T: 3.51ns= 7.00c

Inst 588 X87 : FDIV80 (x/1.0lL: 3.47ns= 6.9c T: 3.55ns= 7.08c

Inst 589 X87 : FDIV80 (x/2.0lL: 3.51ns= 7.0c T: 3.55ns= 7.08c

Inst 590 X87 : FDIV80 (x/0.5lL: 3.51ns= 7.0c T: 3.47ns= 6.92c

instlatdump跑了一遍,然後貌似X87的確快點的說,浮點略快於整數的樣子。

可能是有了硬體除法器之類的威力? 設計上覺得華萊士樹 SRT演算法各種編碼啥的用的都差不多了吧。 實際可以用乘以倒數,移位等法子優化。

然後在http://www.

agner.org/optimize/inst

ruction_tables.pdf

裡。看HaswellFDIV是8-18的樣子。

為什麼cpu的浮點計算能力差,什麼是浮點計算,gpu為什麼擅長浮點計算?

望山 GPU單個計算單元並不擅長浮點運算,它只是浮點運算器非常多而已。但是也只有遇到合適的演算法才能充分發揮GPU的浮點效能,並不是任何問題都能靠堆砌運算器來解決。 不胖的羊 CPU比GPU要兼顧的功能多,不同型別的指令需要的pineline長度不一樣,而浮點計算在CPU裡面的使用率不是太高,占用的...

為什麼計算機計算速度遠超人類,卻無法像人類一樣思考?

鮮血繪師 首先,按理說人腦的運算能力並不發達 這個前提是如何得出的?人腦的運算能力,或者說資訊處理能力,除了我們直接意識到的計算 邏輯推理 記憶 語言 想象 情緒 感知等功能外,還包括對整個機體的調控,或者說是高度並行以及後台運作的,我們基本上只得到計算的結果而非過程,也就是說,我們自己根本不知道人...

隨著計算速度的加快,「硬算」的演算法是不是會逐漸淘汰掉「討巧」的演算法?

francium bobo 放心,人類對於計算能力的需求是沒有止境的,目前我的領域使用十幾億個取樣點,也只能 粗略 的估計等離子體內部的一些 大尺度 的過程,這都需要幾千核心算一兩天。要想用 硬算 來模擬哪怕是一滴水那麼大的氣體都是不可能的,必須用各種巧妙的方法來降低計算量。計算流體裡面的直接法求解...