Tại sao chip Haswell của Intel cho phép nhân FP nhanh gấp đôi so với phép cộng?


35

Tôi đã đọc câu hỏi rất thú vị này trên Stack Overflow:

Phép nhân số nguyên có thực sự được thực hiện ở cùng tốc độ với phép cộng trên CPU hiện đại không?

Một trong những ý kiến ​​cho biết:

"Không có gì đáng giá trên Haswell, thông lượng nhân của FP gấp đôi so với FP add. Đó là vì cả hai cổng 0 và 1 đều có thể được sử dụng để nhân lên, nhưng chỉ có thể sử dụng cổng 1 để thêm vào. -multiply thêm vì cả hai cổng có thể làm chúng. "

Tại sao họ lại cho phép nhân số đồng thời gấp đôi so với phép cộng?


3
Cảm ơn bạn @DKNguyen! Nhưng phép nhân liên quan đến cách điện tử nhiều hơn so với phép cộng (trên thực tế, phép cộng là bước cuối cùng của phép nhân, do đó, bất kỳ mạch nào cần để nhân cũng sẽ bao gồm bất cứ thứ gì cần thiết để thêm vào), vì vậy tôi không thấy làm thế nào nó có thể chiếm ít diện tích chết hơn!
1271772

5
Phép nhân FP phép cộng. Xem logarit.
Janka

9
@Janka Trong khi phép nhân FP không yêu cầu cộng các số mũ, thì vẫn cần phải thực sự nhân các con bọ ngựa. Các mantissa được lưu trữ không phải là một logarit.
Elliot Alderson

6
FWIW trong Skylake, thông lượng "bổ sung thuần túy" đã tăng gấp đôi, vì vậy đây là một sự tò mò từ thời Haswell / Broadwell và không phải là một thứ vốn có.
harold

4
@ user1271772 có, mặc dù chúng là các cổng giống nhau: bổ sung trên các cổng 0 và 1, và phép nhân cũng trên các cổng 0 và 1. Trước khi Skylake chỉ có cổng 1 có thể xử lý bổ sung thuần túy. Điều này cũng mở rộng cho một số hoạt động giống như bổ sung, cụ thể là tối thiểu / tối đa / so sánh Bộ chuyển đổi thực hiện chuyển đổi thực tế (thường có một shuffle hoặc tải Hoopop ở đó)
harold

Câu trả lời:


37

Điều này có thể trả lời tiêu đề của câu hỏi, nếu không phải là cơ thể:

Bổ sung dấu phẩy động yêu cầu căn chỉnh hai mantissa trước khi thêm chúng (tùy thuộc vào sự khác biệt giữa hai số mũ), có khả năng yêu cầu một lượng lớn thay đổi trước bộ cộng. Sau đó, tái chuẩn hóa kết quả của phép cộng mantissa có thể cần thiết, có khả năng yêu cầu một lượng thay đổi lớn khác để định dạng đúng kết quả dấu phẩy động. Do đó, hai bộ chuyển đổi thùng mantissa có khả năng yêu cầu độ trễ cổng nhiều hơn, độ trễ dây lớn hơn hoặc chu kỳ bổ sung vượt quá độ trễ của mặt trước của hệ số nhân mang theo lưu trữ được bổ sung tốt.

Đã thêm cho OP: Lưu ý rằng việc thêm chiều dài 2 milimet và 2 km không phải là 4 đơn vị. Điều đó là do nhu cầu chuyển đổi một hoặc một phép đo khác sang cùng một tỷ lệ hoặc đại diện đơn vị trước khi bổ sung. Chuyển đổi đó về cơ bản đòi hỏi một phép nhân với một số lũy thừa 10. Điều tương tự thường xảy ra trong quá trình cộng dấu phẩy động, bởi vì số dấu phẩy động là một dạng của các số nguyên có tỷ lệ thay đổi (ví dụ: có một đơn vị hoặc hệ số tỷ lệ, một số mũ, được liên kết với mỗi số). Vì vậy, bạn có thể cần chia tỷ lệ một trong các số theo lũy thừa bằng 2 trước khi thêm các bit mantissa thô để có cả hai đại diện cho cùng một đơn vị hoặc tỷ lệ. Tỷ lệ này về cơ bản là một hình thức nhân đơn giản với lũy thừa là 2. Do đó, phép cộng dấu phẩy động đòi hỏi phải nhân(có thể là công suất 2, có thể được thực hiện với sự thay đổi bit hoặc bộ dịch chuyển nòng, có thể yêu cầu các dây tương đối dài liên quan đến kích thước bóng bán dẫn, có thể tương đối chậm trong các mạch in micron phụ sâu). Nếu hai số chủ yếu hủy (vì một số gần âm của số kia), thì có thể cần phải hủy kết quả của phép cộng cũng như định dạng kết quả phù hợp. Vì vậy, phép cộng có thể chậm nếu cần thêm 2 bước nhân (trước và sau) xung quanh phép cộng nhị phân của số bit mantissa cố định (hữu hạn) đại diện cho các đơn vị hoặc tỷ lệ tương đương, do tính chất của định dạng số (dấu phẩy động của IEEE ).

Đã thêm # 2: Ngoài ra, nhiều điểm chuẩn FMACS (tích lũy nhân) nhiều hơn số trần. Trong MAC hợp nhất, việc căn chỉnh (dịch chuyển) của phần bổ sung thường có thể được thực hiện song song với bội số, và phần bổ sung mantissa thường có thể được đưa vào cây CSA trước khi lan truyền mang theo cuối cùng.


Bình luận không dành cho thảo luận mở rộng; cuộc trò chuyện này đã được chuyển sang trò chuyện . Bất kỳ kết luận nào đạt được nên được chỉnh sửa lại thành câu hỏi và / hoặc bất kỳ câu trả lời nào.
Dave Tweed

3
Tôi đang gọi cho BS. Chắc chắn rằng phép nhân thực tế trong hoạt động nhân bội của FP có thể khó hơn hai ca làm việc.
dùng253751

5
"Khó hơn", có khả năng nhanh hơn và đáng để tối ưu hóa, với các ràng buộc và mục tiêu của dự án, là 4 điều khác nhau.
hotpaw2

3
@immibis: Trước Haswell, CPU Intel có 1 đơn vị thêm SIMD FP (độ trễ 3 chu kỳ) và 1 đơn vị mul SIMD FP (độ trễ 5 chu kỳ). Vì vậy, add là nhanh hơn nhân. (Đó là lý do Haswell giữ một đơn vị bổ sung FP riêng khi thêm các đơn vị FMA 2x cho fma và mul thay vì chạy nó trên đơn vị FMA như SKL). Ngoài ra, các ca làm việc của SIMD chạy với độ trễ 1c, so với SIMD-int mul ở độ trễ 5c (cõng trên các số nhân có ý nghĩa trong một đơn vị FMA). Vì vậy, có, sự thay đổi là rẻ hơn nhiều so với nhân. Cả add và mul đều được lắp đặt đầy đủ nên cả hai đều cần một bộ chuyển động thùng riêng để bình thường hóa đầu ra.
Peter Cordes

22

Trong phép nhân FP, xử lý số mũ hóa ra là phép cộng đơn giản (vì chính xác cùng một lý do là phép nhân trong miền log chỉ là phép cộng). Bạn đã đi qua logarit, tôi hy vọng.

Bây giờ hãy xem xét việc thêm hai số ở dạng logarit khó như thế nào ...

Điểm nổi có một vùng màu xám giữa miền tuyến tính và log, với các khía cạnh của cả hai. Mỗi số FP bao gồm một mantissa (là tuyến tính) và số mũ (logarit). Để xác định ý nghĩa của từng bit trong lớp phủ, trước tiên bạn phải xem xét số mũ (đây chỉ là một yếu tố tỷ lệ).

Ngoài ra, việc xử lý số mũ trong trường hợp tổng quát, yêu cầu nòng súng thay đổi lớp phủ hai lần, trong đó mỗi lần thay đổi thùng là một trường hợp đặc biệt của phép nhân hơi đơn giản hóa.

(Sự thay đổi đầu tiên sắp xếp cả hai đầu vào có cùng công suất là 2, sao cho một bit mantissa có cùng trọng số nhị phân trong mỗi toán hạng.

Một ví dụ thập phân sẽ đủ (mặc dù nhị phân rõ ràng được sử dụng) ...

(3103)+(1101)=(3103)+(0.0001103)

Thứ hai quy mô lại đầu ra ...

1100+(0.999100)=0.001100=1103

Nghịch lý thay, một bổ sung FP liên quan đến một cái gì đó rất giống như hai phép nhân phải được thực hiện tuần tự, với sự bổ sung mantissa giữa chúng. Trong ánh sáng đó, hiệu suất báo cáo không quá ngạc nhiên.


8
"Xem xét mức độ khó để thêm hai số ở dạng logarit" là rất sáng tỏ.
Peter - Tái lập lại

1
mặc dù may mắn thay, số mũ của dấu phẩy động chỉ là số nguyên, vì vậy bạn không cần phải thêm bất cứ thứ gì như 1.3 + 2.3 = 2.34, đó chỉ là sự dịch chuyển của bọ ngựa.
ilkkachu

1
Lý do bạn có thể thực hiện hai bội số trên mỗi chu kỳ là vì có hai đơn vị nhân, không phải vì đơn vị nhân nhanh hơn đơn vị cộng (xem sơ đồ trong câu trả lời của pjc50). Bạn không thể trả lời câu hỏi này bằng cách giải thích lý do tại sao bạn nghĩ rằng một đơn vị bổ sung chậm hơn một đơn vị nhân. Bên cạnh đó, các câu trả lời khác cho đến nay cho biết đơn vị bổ sung có độ trễ thấp hơn, cho thấy rằng bổ sung là hoạt động đơn giản hơn.
dùng253751

2
@immibis: quan sát của bạn là chính xác. Nhưng câu hỏi đặt ra là "tại sao lại như vậy? Tại sao không có hai đơn vị bổ sung, với điều đó là sự bổ sung đơn giản / rẻ hơn nhiều so với mpy?" Một phần của câu trả lời là, "trong FP, nó thực sự không đơn giản". Phần còn lại thuộc về kinh tế: với chi phí thực tế và rất nhiều nghiên cứu về khối lượng công việc dự kiến, trình bổ sung thứ hai đã không chứng minh được vị trí của nó trong silicon. Tôi sẽ để lại các câu trả lời khác để mở rộng về phần đó.
Brian Drumond

Một số nhà khoa học máy tính (ví dụ Kahan (kiến trúc sư của IEEE754 FP) và Knuth) cho rằng "mantissa" là từ sai nó tuyến tính (không phải logarit). Thuật ngữ hiện đại ưa thích là có ý nghĩa. vi.wikipedia.org/wiki/Significand#Use_of_%22mantissa%22 . "mantissa" là một từ trông mát mẻ hơn với ít âm tiết hơn, mặc dù.
Peter Cordes

16

TL: DR : vì Intel nghĩ rằng độ trễ thêm SSE / AVX FP quan trọng hơn thông lượng, nên họ đã chọn không chạy nó trên các đơn vị FMA trong Haswell / Broadwell.


Haswell chạy FP (SIMD) nhân trên cùng một đơn vị thực thi như FMA ( Fuse Multiply-Add ), trong đó có hai vì một số mã chuyên sâu của FP có thể sử dụng hầu hết các FMA để thực hiện 2 FLOP mỗi lệnh. Độ trễ 5 chu kỳ tương tự như FMA và như mulpstrên các CPU trước đó (Sandybridge / IvyBridge). Haswell muốn có 2 đơn vị FMA và không có nhược điểm nào khi cho phép nhân lên vì chúng có cùng độ trễ như đơn vị nhân dành riêng trong các CPU trước đó.

Nhưng nó giữ cho đơn vị thêm SIMD FP chuyên dụng từ các CPU trước đó vẫn chạy addps/ addpdvới độ trễ 3 chu kỳ. Tôi đã đọc rằng lý do có thể có thể là mã mà rất nhiều FP thêm có xu hướng tắc nghẽn về độ trễ của nó, chứ không phải thông lượng. Điều đó chắc chắn đúng với một tổng số ngây thơ của một mảng chỉ có một bộ tích lũy (vectơ), như bạn thường nhận được từ tự động hóa vector GCC. Nhưng tôi không biết liệu Intel có công khai xác nhận đó là lý do của họ không.

Broadwell là như nhau ( nhưng tăng tốcmulpsmulpd độ trễ / lên đến 3c trong khi FMA vẫn ở mức 5c). Có lẽ họ đã có thể tắt đơn vị FMA và nhận được kết quả nhân lên trước khi thực hiện một bổ sung giả 0.0, hoặc có thể một cái gì đó hoàn toàn khác và đó là cách quá đơn giản. BDW chủ yếu là một bản thu nhỏ của HSW với hầu hết các thay đổi là nhỏ.

Trong Skylake, mọi thứ FP (bao gồm cả bổ sung) chạy trên đơn vị FMA với độ trễ 4 chu kỳ và thông lượng 0,5c, ngoại trừ khóa học div / sqrt và bitwise (ví dụ cho giá trị tuyệt đối hoặc phủ định). Intel rõ ràng đã quyết định rằng nó không có giá trị thêm silicon cho việc bổ sung FP có độ trễ thấp hơn, hoặc addpsthông lượng không cân bằng là có vấn đề. Và cũng chuẩn hóa độ trễ giúp tránh xung đột ghi lại (khi 2 kết quả đã sẵn sàng trong cùng một chu kỳ) dễ tránh hơn trong lập lịch uop. tức là đơn giản hóa các cổng lập lịch và / hoặc hoàn thành.

Vì vậy, có, Intel đã thay đổi nó trong bản sửa đổi kiến ​​trúc vi mô lớn tiếp theo của họ (Skylake). Giảm độ trễ FMA trong 1 chu kỳ làm cho lợi ích của đơn vị thêm SIMD FP chuyên dụng nhỏ hơn rất nhiều, đối với các trường hợp bị giới hạn độ trễ.

Skylake cũng cho thấy các dấu hiệu của Intel đã sẵn sàng cho AVX512, trong đó việc mở rộng một trình bổ sung SIMD-FP riêng biệt rộng tới 512 bit sẽ còn làm mất thêm diện tích. Skylake-X (với AVX512) được cho là có lõi gần giống với Skylake-client thông thường, ngoại trừ bộ đệm L2 lớn hơn và (trong một số kiểu máy), một đơn vị FMA 512 bit bổ sung được "bắt vít" vào cổng 5.

SKX tắt cổng 1 SIMD ALU khi các vòng 512 bit đang hoạt động, nhưng nó cần một cách để thực hiện vaddps xmm/ymm/zmmtại bất kỳ điểm nào. Điều này làm cho việc có một đơn vị FP ADD chuyên dụng trên cổng 1 là một vấn đề và là một động lực riêng để thay đổi từ hiệu suất của mã hiện có.

Sự thật thú vị: tất cả mọi thứ từ Skylake, KabyLake, Coffee Lake và thậm chí Cascade Lake đều giống hệt về mặt kiến ​​trúc với Skylake, ngoại trừ Cascade Lake bổ sung một số hướng dẫn AVX512 mới. IPC không thay đổi. CPU mới hơn có iGPU tốt hơn, mặc dù. Ice Lake (kiến trúc vi mô Sunny Cove) là lần đầu tiên sau vài năm chúng ta thấy một kiến ​​trúc vi mô mới thực sự (ngoại trừ Cannon Lake chưa bao giờ được phát hành rộng rãi).


Các đối số dựa trên độ phức tạp của đơn vị FMUL so với đơn vị FADD rất thú vị nhưng không liên quan trong trường hợp này . Một đơn vị FMA bao gồm tất cả các phần cứng dịch chuyển cần thiết để thực hiện bổ sung FP như là một phần của FMA 1 .

Lưu ý: Tôi không có nghĩa là x87 fmulhướng dẫn, ý tôi là một SSE / AVX SIMD / vô hướng FP nhân ALU rằng hỗ trợ 32-bit chính xác đơn / float64-bit doublechính xác (53-bit significand aka mantissa). ví dụ như hướng dẫn như mulpshoặc mulsd. 80 bit x87 thực tếfmul vẫn chỉ là 1 / thông lượng xung nhịp trên Haswell, trên cổng 0.

Các CPU hiện đại có quá nhiều bóng bán dẫn để giải quyết các vấn đề khi nó đáng giá và khi nó không gây ra vấn đề trì hoãn lan truyền khoảng cách vật lý. Đặc biệt là đối với các đơn vị thực hiện chỉ hoạt động một số thời gian. Xem https://en.wikipedia.org/wiki/Dark_silicon và tài liệu hội nghị năm 2011 này: Dark Silicon và sự kết thúc của quy mô đa nhân. Đây là điều giúp CPU có thể có thông lượng FPU lớn và thông lượng nguyên lớn, nhưng không phải cả hai cùng một lúc (vì các đơn vị thực thi khác nhau này nằm trên cùng một cổng điều phối để chúng cạnh tranh với nhau). Trong rất nhiều mã được điều chỉnh cẩn thận mà không bị tắc nghẽn trên băng thông mem, nó không phải là đơn vị thực thi back-end là yếu tố giới hạn, mà thay vào đó là thông lượng lệnh phía trước. ( lõi rộng rất đắt ). Xem thêm http://www.lighterra.com/ con / modernmicro Processors / .


Trước Haswell

Trước HSW , các CPU Intel như Nehalem và Sandybridge đã nhân SIMD FP trên cổng 0 và SIMD FP thêm vào cổng 1. Vì vậy, có các đơn vị thực thi riêng biệt và thông lượng được cân bằng. ( https://stackoverflow.com/questions/8389648/how-do-i-achieve-the-theorory-maximum-of-4-flops-per- Motorcycle

Haswell đã giới thiệu hỗ trợ FMA cho CPU Intel (một vài năm sau khi AMD giới thiệu FMA4 trong Bulldozer, sau khi Intel giả mạo họ bằng cách chờ đợi càng sớm càng tốt để họ công khai rằng họ sẽ triển khai FMA 3 hoạt động chứ không phải 4 hoạt động -destrative-đích FMA4). Sự thật thú vị: AMD Piledriver vẫn là CPU x86 đầu tiên có FMA3, khoảng một năm trước Haswell vào tháng 6 năm 2013

Điều này đòi hỏi một số hack lớn của các phần bên trong để thậm chí hỗ trợ một uop duy nhất với 3 đầu vào. Nhưng dù sao đi nữa, Intel đã tích hợp và tận dụng các bóng bán dẫn ngày càng thu hẹp để đưa vào hai đơn vị SIMD FMA 256 bit, tạo ra các con thú Haswell (và người kế nhiệm của nó) cho toán học FP.

Một mục tiêu hiệu suất mà Intel có thể có trong đầu là sản phẩm matmul và vector chấm dày đặc BLAS. Cả hai của những người chủ yếu là có thể sử dụng FMA và không cần chỉ thêm.

Như tôi đã đề cập trước đó, một số khối lượng công việc chủ yếu hoặc chỉ bổ sung FP bị tắc nghẽn khi thêm độ trễ, (phần lớn) không phải là thông lượng.


Chú thích 1 : Và với số nhân 1.0, FMA theo nghĩa đen có thể được sử dụng để bổ sung, nhưng với độ trễ kém hơn so với addpschỉ dẫn. Điều này có khả năng hữu ích cho các khối lượng công việc như tổng hợp một mảng nóng trong bộ đệm L1d, trong đó FP thêm thông lượng quan trọng hơn độ trễ. Điều này chỉ có ích nếu bạn sử dụng nhiều bộ tích hợp véc tơ để che giấu độ trễ, tất nhiên và giữ 10 hoạt động FMA trong chuyến bay trong các đơn vị thực thi FP (độ trễ 5c / thông lượng 0,5c = độ trễ 10 hoạt động * sản phẩm băng thông). Bạn cũng cần phải làm điều đó khi sử dụng FMA cho một sản phẩm chấm vector .

Xem David Kerer viết lên kiến ​​trúc vi mô Sandybridge có sơ đồ khối trong đó EU sẽ ở cổng nào cho NHM, SnB và AMD Bulldozer-gia đình. (Xem thêm bảng hướng dẫn của Agner Fog và hướng dẫn microarch tối ưu hóa asm, và https://uops.info/ mà cũng có thử nghiệm thực nghiệm của UOPs, bến cảng, và độ trễ / thông lượng của hầu hết các hướng dẫn trên nhiều thế hệ microarchitectures Intel.)

Cũng liên quan: https://stackoverflow.com/questions/8389648/how-do-i-achieve-the-theorory-maximum-of-4-flops-per- Motorcycle


1
Trong trường hợp bạn đang tự hỏi về việc có nên dùng từ ngữ của tôi cho điều này: trên Stack Overflow, tôi có phù hiệu vàng bao gồm [cpu-architecture], [performance], [x86-64], [assembly], và [sse]. Tôi đã viết một câu trả lời về mã C ++ để kiểm tra phỏng đoán Collatz nhanh hơn lắp ráp viết tay - tại sao? mà rất nhiều người nghĩ là tốt Ngoài ra điều này về thực hiện đường ống OoO.
Peter Cordes

"BDW chủ yếu là sự thu hẹp của HSW với hầu hết các thay đổi là nhỏ." Làm cho nó có vẻ như họ cố tình để lại một số tối ưu hóa hoàn tác trong lần đầu tiên đi xung quanh, có thể vì lý do tài chính.
jpaugh

2
@jpaugh: Xem en.wikipedia.org/wiki/Tick%E2%80%93tock_model - Kế hoạch của Intel từ khoảng năm 2006 (cho đến khi họ đạt được rào cản trên 10nm) đã bị thu hẹp trong một quy trình mới với những thay đổi nhỏ khác, sau đó là kiến ​​trúc mới trên quy trình đã được thử nghiệm. Hãy nhớ rằng sự phát triển đang được triển khai trong nhiều năm với nhiều thiết kế trong tương lai đang bay: họ không hoàn thành một trước khi bắt đầu kế tiếp. Broadwell luôn có ý định chỉ là một "tích tắc" trước khi "tock" Skylake tận dụng tối đa quy trình sản xuất 14nm của họ và không phải lo lắng về việc gỡ lỗi quy trình, chỉ là thiết kế
Peter Cordes

Tôi đánh giá cao các liên kết. Về cơ bản, bạn đã lặp lại tình cảm của tôi, mặc dù với độ chính xác cao hơn nhiều so với tôi có thể tập hợp được.
jpaugh

8

Tôi sẽ xem xét phần này:
"Tại sao họ lại cho phép " ...
TL; DR - bởi vì họ đã thiết kế nó theo cách đó. Đó là một quyết định quản lý. Chắc chắn có câu trả lời của mantissa và bit shift, nhưng đây là những điều đi vào quyết định quản lý.

Tại sao họ lại thiết kế theo cách đó? Câu trả lời là thông số kỹ thuật được thực hiện để đáp ứng các mục tiêu nhất định. Những mục tiêu bao gồm hiệu suất và chi phí. Hiệu suất không hướng đến các hoạt động, thay vào đó là một điểm chuẩn như FLOPS hoặc FPS trong Crysis.
Các điểm chuẩn này sẽ có một hỗn hợp các chức năng, một số trong số đó có thể được xử lý cùng một lúc.
Nếu các nhà thiết kế cho rằng việc có hai chức năng của widget A làm cho nó nhanh hơn nhiều, thay vì hai chức năng của widget B, thì họ sẽ đi với widget A. Thực hiện hai trong số A và hai của B sẽ tốn kém hơn.

Nhìn lại khi siêu đường ống và siêu đường ống (trước khi đa lõi) lần đầu tiên trở nên phổ biến trên các chip thương mại, chúng đã ở đó để tăng hiệu suất. Pentium có hai ống, và không có vector nào hợp nhất. Haswell có nhiều đường ống, đơn vị vectơ, đường ống sâu hơn, chức năng chuyên dụng và nhiều hơn nữa. Tại sao không có hai thứ? Bởi vì họ đã thiết kế nó theo cách đó.


Một mục tiêu hiệu suất phù hợp hơn có thể là sản phẩm matmul và vector chấm dày đặc BLAS. Cả hai đều có thể sử dụng FMA và không cần thêm.
Peter Cordes

Tôi chưa bao giờ thấy sản phẩm matmul và vector chấm dày đặc của BLAS trên hộp sản phẩm. Không thấy những điều này trong quảng cáo. Không thấy những điều này trong một đánh giá sản phẩm. (Chắc chắn họ rất quan trọng, nhưng kỹ thuật tuân theo quản lý, quản lý theo sau tiếp thị, tiếp thị sau bán hàng. Bán hàng được mua bởi những người bình thường.
MikeP

1
Tôi đã thấy các đánh giá CPU bao gồm các điểm chuẩn như Linpack. Nhưng dù sao, như bạn nói (tối đa về mặt lý thuyết) FLOPS sẽ được quảng cáo và về cơ bản đó là một proxy cho hiệu suất matmul nếu bộ nhớ cache có thể theo kịp. Tôi không chắc chắn liệu có bất kỳ điểm chuẩn nào của Specfp gần với việc bão hòa cả hai đơn vị FMA trên HSW hoặc SKL hay không, nhưng điểm chuẩn của Spec rất quan trọng. Không phải tất cả doanh số đều là bán lẻ một lần; một số người mua tinh vi như người mua cụm siêu máy tính quyết định khi nào cần nâng cấp hoặc trang trại máy chủ của công ty. Lợi nhuận cũng cao hơn trên những doanh số đó, tôi nghĩ vậy.
Peter Cordes

6

Sơ đồ này của Intel có thể giúp:

Haswell Execution Unit Overview

Có vẻ như họ đã cung cấp cho mỗi đơn vị một FMA (cộng gộp nhiều lần) cũng như một bội số và một trình cộng duy nhất. Họ có thể hoặc không thể chia sẻ phần cứng bên dưới.

Câu hỏi tại sao khó trả lời hơn nhiều nếu không có sự hợp lý trong thiết kế bên trong, nhưng văn bản trong hộp màu tím cho chúng ta một gợi ý với "FLOPs tăng gấp đôi": bộ xử lý sẽ nhắm mục tiêu một tập hợp điểm chuẩn, xuất phát từ các trường hợp sử dụng thực tế. FMA rất phổ biến trong số này vì nó là đơn vị cơ bản của phép nhân ma trận. Ngoài ra trần là ít phổ biến.

Như bạn đã chỉ ra, bạn có thể sử dụng cả hai cổng để thực hiện bổ sung bằng lệnh FMA trong đó tham số nhân là 1, tính toán (A x 1) + B. Điều này sẽ chậm hơn một chút so với bổ sung trần.


FP Multiply chạy trên đơn vị FMA. FP add chạy với độ trễ thấp hơn trên đơn vị add SIM SIMD chuyên dụng chỉ trên cổng 1. Có thể nó chia sẻ một số bóng bán dẫn với thiết bị FMA trên cổng đó, nhưng từ những gì tôi đã đọc, tôi có ấn tượng rằng nó cần thêm diện tích đáng kể để cung cấp điều này.
Peter Cordes

đăng một câu trả lời với nhiều chi tiết hơn.
Peter Cordes

4

Hãy xem các bước tốn thời gian:

Ngoài ra: Căn chỉnh các số mũ (có thể là một hoạt động thay đổi lớn). Một bộ cộng 53 bit. Chuẩn hóa (tối đa 53 bit).

Phép nhân: Một mạng cộng lớn để giảm 53 x 53 sản phẩm một bit thành tổng của hai số 106 bit. Một bộ cộng 106 bit. Bình thường hóa. Tôi có thể nói việc giảm các sản phẩm bit thành hai số có thể được thực hiện nhanh như bộ cộng cuối cùng.

Nếu bạn có thể thực hiện phép nhân thời gian biến thì bạn có lợi thế là việc chuẩn hóa sẽ chỉ thay đổi một chút trong hầu hết thời gian và bạn có thể phát hiện các trường hợp khác rất nhanh (đầu vào không chuẩn hóa, hoặc số lượng của số mũ quá nhỏ).

Ngoài ra, cần các bước chuẩn hóa là rất phổ biến (thêm các số không có kích thước bằng nhau, trừ các số gần đúng). Vì vậy, để nhân lên, bạn có thể đủ khả năng để có một con đường nhanh và tạo ra một cú hích lớn cho con đường chậm; ngoài ra bạn không thể.

Tái bút Đọc các bình luận: Điều hợp lý là việc thêm các số không chuẩn hóa sẽ không bị phạt: Điều đó chỉ có nghĩa là trong số các bit được dịch chuyển để căn chỉnh các số mũ, nhiều số là số 0. Và kết quả không chuẩn hóa có nghĩa là bạn ngừng dịch chuyển để loại bỏ các số 0 đứng đầu nếu điều đó làm cho số mũ quá nhỏ.


CPU Intel thực tế xử lý bội số bất thường (đầu vào hoặc đầu ra) thông qua hỗ trợ vi mã; tức là FPU thông thường báo hiệu một ngoại lệ thay vì có thêm một giai đoạn đường ống cho trường hợp này. Agner Fog nói lại: Sandybridge Trong các thử nghiệm của tôi, các trường hợp số dưới và số không bình thường được xử lý nhanh như số dấu phẩy động thông thường để thêm vào, nhưng không phải để nhân. Đây là lý do tại sao biên dịch với -ffast-mathcác bộ FTZ / DAZ (tuôn ra biến đổi thành không) để làm điều đó thay vì thực hiện trợ giúp FP.
Peter Cordes

Trong hướng dẫn vi mô của Agner , ông nói luôn có một hình phạt khi các hoạt động với đầu vào bình thường tạo ra đầu ra không bình thường. Nhưng thêm một bình thường + không bình thường không có hình phạt. Vì vậy, đánh giá tóm tắt có thể không chính xác hoặc hướng dẫn uarch không chính xác. Agner nói rằng Knight's Landing (Xeon Phi) không bị phạt đối với bất kỳ phân nhóm phụ nào trên mul / add, chỉ chia. Nhưng KNL có độ trễ thêm / mul / FMA (6c) cao hơn so với Haswell chính (5c) / SKL (4c). Thật thú vị, AMD Ryzen có một hình phạt chỉ trong một vài chu kỳ, so với một hình phạt lớn đối với gia đình Bulldozer.
Peter Cordes

Theo constrast, GPU là tất cả về thông lượng, không phải độ trễ, vì vậy chúng thường có độ trễ cố định cho tất cả các trường hợp ngay cả đối với các mạng con. Bẫy vào microcode có lẽ thậm chí không phải là một lựa chọn cho một đường ống trần như thế.
Peter Cordes
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.