Làm thế nào có thể bộ nhớ cache nhanh như vậy?


37

Dưới đây là một ảnh chụp màn hình của một điểm chuẩn bộ nhớ cache:

Kết quả điểm chuẩn Bộ nhớ cache & Bộ nhớ AIDA64

Trong điểm chuẩn, tốc độ đọc bộ đệm L1 là khoảng 186 GB / s, với độ trễ là khoảng 3-4 chu kỳ xung nhịp. Làm thế nào là một tốc độ thậm chí đạt được?

Xem xét bộ nhớ ở đây: tốc độ tối đa theo lý thuyết là 665 MHz (tần số bộ nhớ) x 2 (tốc độ dữ liệu gấp đôi) x 64 bit (độ rộng bus) khoảng 10,6 GB / s, gần với giá trị chuẩn là 9,6 GB / s .

Nhưng với bộ đệm L1, ngay cả khi chúng ta có thể đọc ở mọi chu kỳ với bộ xử lý ở tần số tối đa (3 GHz), chúng ta sẽ cần khoảng 496 dòng dữ liệu để đạt được thông lượng như vậy nghe có vẻ không thực tế. Điều này áp dụng cho các bộ nhớ cache khác là tốt.

Tôi đang thiếu gì? Làm thế nào để chúng ta tính toán thông lượng của bộ đệm từ các tham số của nó?


14
Bạn đã xem xét bộ đệm L1,2,3 nhỏ như thế nào và bằng nhau ở nơi nó nằm trên thực tế. Mẹo, bạn không cần quan tâm đến tiêu chuẩn xe buýt nếu bạn sở hữu toàn bộ chip
JonRB

2
Ngoài ra: Điểm chuẩn có biết đủ về những gì nó đang làm để đảm bảo một số dữ liệu mà nó kiểm tra không được giữ thẳng trong một thanh ghi không?
rackandboneman

7
@rackandboneman: AIDA64 là một điểm chuẩn được tôn trọng, không phải là thứ mà ai đó vừa hack trong C và để trình biên dịch tối ưu hóa một số tải! Tôi giả sử các phần microbenchmark được viết bằng cách lắp ráp, với các phiên bản SSE hoặc AVX.
Peter Cordes

1
@Peter Cordes thỏa mãn câu trả lời - cho một câu hỏi cần thiết.
rackandboneman

1
Chỉ cần đặt những suy nghĩ vào quan điểm vật lý: trong 1,4 nano giây, ánh sáng truyền đi khoảng một bước rưỡi. Điều đó có nghĩa là nếu bộ đệm được đặt ở phía bên kia của bo mạch chủ, độ trễ như thế có thể phá vỡ tính tương đối. Hoặc là một lỗi đo lường .
Arthur

Câu trả lời:


35

CPU này có ...

2 lõi Một lệnh 32-KB và bộ đệm cấp dữ liệu 32-KB (L1) cho mỗi lõi

Vì có hai lõi, chúng ta có thể mong đợi điểm chuẩn chạy song song hai luồng. Tuy nhiên, trang web của họ cung cấp rất ít thông tin, nhưng nếu chúng ta nhìn vào đây , các CPU có nhiều lõi hơn dường như cho thông lượng L1 tương ứng cao hơn. Vì vậy, tôi nghĩ rằng những gì được hiển thị là tổng thông lượng với tất cả các lõi hoạt động song song. Vì vậy, đối với CPU của bạn, chúng ta nên chia hai cho một lõi và một bộ đệm:

Read   93 GB/s
Write  47 GB/s
Copy   90 GB/s

Bây giờ, thực tế "sao chép" nhanh gấp 2 lần so với "ghi" rất đáng ngờ. Làm thế nào nó có thể sao chép nhanh hơn nó có thể viết? Tôi sẽ đặt cược rằng những gì điểm chuẩn hiển thị là "bản sao" là tổng thông lượng đọc + ghi và trong trường hợp này, cả hai sẽ đọc và ghi với tốc độ 45 GB / giây, nhưng hiển thị 90, vì đó là điểm chuẩn và Ai địa ngục tin tưởng điểm chuẩn? Vì vậy, hãy bỏ qua "bản sao".

Read   93 GB/s => 30 bytes/clock
Write  47 GB/s => 15 bytes/clock

Bây giờ, một thanh ghi 128 bit là 16 byte, đủ gần, do đó, có vẻ như bộ đệm này có thể thực hiện hai lần đọc 128 bit và một lần ghi trên mỗi đồng hồ.

Đây chính xác là bạn muốn thực sự hợp lý hóa các hướng dẫn bẻ khóa số SSE đó: hai lần đọc và một lần viết mỗi chu kỳ.

Điều này rất có thể sẽ được thực hiện với rất nhiều dòng dữ liệu song song, đó là cách thông thường để thu thập rất nhiều dữ liệu rất nhanh bên trong một con chip.


4
Trên trang 55 của tài liệu @ next-hack liên kết đến nó ghi "Bên trong, truy cập lên tới 16 byte. [...] Hai thao tác tải và một thao tác lưu trữ có thể được xử lý mỗi chu kỳ". Điều đó giải thích tại sao đọc nhanh hơn hai lần - nó có thể thực hiện hai lần đọc trong cùng một thao tác trong khi cũng thực hiện một lần ghi.
Tom Carpenter

2
Có, nó rõ ràng đang đếm bản sao BW = đọc và viết. Điều đó có vẻ hợp lệ như là sự thay thế, vì nó có ý nghĩa rằng việc đọc và ghi có thể thực hiện song song. Lưu ý rằng số của OP cho L2 / L3 có bản sao không cao hơn ghi và thấp hơn cho bộ nhớ. Bus bộ nhớ DDR3 không phải là song công hoàn toàn: các dòng dữ liệu tương tự là cần thiết để đọc và ghi. (Để biết thêm về băng thông memcpy / memset x86 với các cửa hàng NT so với các cửa hàng thông thường, hãy xem stackoverflow.com/questions/43343231/iêu ).
Peter Cordes

6
Bạn đang đoán rằng IvyBridge có thể thực hiện 2 lần đọc 1 lần ghi trong cùng một chu kỳ đồng hồ. Bạn tình cờ là đúng, nhưng chỉ trong những trường hợp rất hạn chế. IvB chỉ có 2 cổng AGU, do đó, thông thường chỉ giới hạn ở 2 ops bộ nhớ cho mỗi đồng hồ, tối đa một trong số đó có thể là một cửa hàng . Nhưng tải / lưu trữ AVX 256b mất 2 chu kỳ để thực thi trong các cổng tải / lưu trữ, trong khi chỉ cần AGU trong chu kỳ đầu tiên. Vì vậy, một uop địa chỉ cửa hàng có thể chạy trên cổng 2/3 trong chu kỳ thứ 2 của tải 256b mà không tốn bất kỳ băng thông tải nào. (Lưu trữ dữ liệu lưu trữ chạy trên cổng 4.) Nguồn: agner.org/optizes microarch pdf
Peter Cordes

2
Một CPU AMD Bulldozer-gia đình hoặc CPU Ryzen sẽ cung cấp cho bạn cùng số lần đọc = 2 lần ghi, nhưng chúng thực sự bị giới hạn ở 2 ops bộ nhớ trên mỗi đồng hồ (tối đa một lần có thể ghi) không có sơ hở. đọc / ghi / sao chép không phát hiện ra sự khác biệt, nhưng Triad có thể ( a[i] = b[i] + c[i]). BTW, Intel Haswell và sau đó có AGU lưu trữ trên cổng 7 có thể xử lý các chế độ địa chỉ đơn giản (không được lập chỉ mục), do đó chúng có thể thực hiện 2 lần tải + 1 lưu trữ trên mỗi đồng hồ. (Và đường dẫn dữ liệu tới L1D là 256b, do đó, nó tăng gấp đôi băng thông L1D.) Xem phần ghi lại của David Kanter: realworldtech.com/haswell-cpu/5
Peter Cordes

1
@AliChen: OP đã đề cập rõ ràng độ trễ sử dụng tải 4 chu kỳ của IvyBridge ngay sau khi băng thông, trước khi hỏi làm thế nào nó có thể nhanh như vậy.
Peter Cordes

27

Câu trả lời của @ peufeu chỉ ra rằng đây là những băng thông tổng hợp trên toàn hệ thống. L1 và L2 là bộ nhớ riêng cho mỗi lõi trong gia đình Intel Sandybridge, vì vậy các con số là gấp đôi những gì một lõi đơn có thể làm. Nhưng điều đó vẫn để lại cho chúng tôi một băng thông cao ấn tượng và độ trễ thấp.

Bộ đệm L1D được tích hợp ngay vào lõi CPU và được kết hợp rất chặt chẽ với các đơn vị thực thi tải (và bộ đệm lưu trữ) . Tương tự, bộ đệm L1I nằm ngay bên cạnh phần tìm nạp / giải mã của lõi. (Tôi thực sự đã không nhìn vào sơ đồ sàn silicon của Sandybridge, vì vậy điều này có thể không đúng theo nghĩa đen. Vấn đề / đổi tên của phần đầu có lẽ gần với bộ đệm uop được giải mã "L0", giúp tiết kiệm năng lượng và có băng thông tốt hơn hơn bộ giải mã.)

Nhưng với bộ đệm L1, ngay cả khi chúng ta có thể đọc ở mọi chu kỳ ...

Tại sao dừng lại ở đó? Intel kể từ Sandybridge và AMD kể từ K8 có thể thực hiện 2 lần tải mỗi chu kỳ. Bộ nhớ cache đa cổng và TLB là một điều.

Bản ghi vi kiến ​​trúc Sandybridge của David Kanter có một sơ đồ đẹp (cũng áp dụng cho CPU IvyBridge của bạn):

("Bộ lập lịch thống nhất" giữ ALU và các bộ nhớ đang chờ các đầu vào của chúng sẵn sàng và / hoặc chờ cổng thực thi của chúng (ví dụ: vmovdqa ymm0, [rdi]giải mã thành một uop tải phải chờ rdinếu trước đó add rdi,32chưa thực hiện Ví dụ) Intel lên lịch cho các cổng vào thời điểm phát hành / đổi tên . Sơ đồ này chỉ hiển thị các cổng thực thi cho các uops bộ nhớ, nhưng các u ALU chưa được thực thi cũng cạnh tranh với nó. Giai đoạn phát hành / đổi tên thêm uops vào ROB và trình lập lịch Họ ở lại ROB cho đến khi nghỉ hưu, nhưng trong lịch trình chỉ cho đến khi gửi đến một cổng thực thi. (Đây là thuật ngữ của Intel; những người khác sử dụng vấn đề và gửi đi khác nhau)). AMD sử dụng các bộ lập lịch riêng cho số nguyên / FP, nhưng các chế độ địa chỉ luôn sử dụng các thanh ghi số nguyên

Sơ đồ bộ nhớ SnB của David Kanter

Như đã chỉ ra, chỉ có 2 cổng AGU (đơn vị tạo địa chỉ, có chế độ địa chỉ như [rdi + rdx*4 + 1024]và tạo địa chỉ tuyến tính). Nó có thể thực thi 2 ops bộ nhớ trên mỗi đồng hồ (mỗi 128b / 16 byte), cho đến một trong số chúng là một cửa hàng.

Nhưng nó có một mẹo nhỏ: SnB / IvB chạy 256b tải / lưu trữ AVX dưới dạng một uop duy nhất có 2 chu kỳ trong một cổng tải / lưu trữ, nhưng chỉ cần AGU trong chu kỳ đầu tiên. Điều đó cho phép một địa chỉ cửa hàng uop chạy trên AGU trên cổng 2/3 trong chu kỳ thứ hai đó mà không mất bất kỳ thông lượng tải nào. Vì vậy, với AVX (mà CPU Intel Pentium / Celeron không hỗ trợ: /), SnB / IvB có thể (về lý thuyết) duy trì 2 tải 1 cửa hàng mỗi chu kỳ.

CPU IvyBridge của bạn là bản thu nhỏ của Sandybridge (với một số cải tiến vi kiến ​​trúc, như loại bỏ Mov , ERMSB (memcpy / memset) và tìm nạp trước phần cứng trang tiếp theo). Thế hệ sau đó (Haswell) đã nhân đôi băng thông L1D trên mỗi đồng hồ bằng cách mở rộng đường dẫn dữ liệu từ các đơn vị thực thi sang L1 từ 128b lên 256b để tải AVX 256b có thể duy trì 2 trên mỗi đồng hồ. Nó cũng thêm một cổng AGU lưu trữ bổ sung cho các chế độ địa chỉ đơn giản.

Thông lượng cực đại của Haswell / Skylake là 96 byte được tải + được lưu trữ trên mỗi đồng hồ, nhưng hướng dẫn tối ưu hóa của Intel cho thấy thông lượng trung bình được duy trì của Skylake (vẫn cho rằng không có L1D hoặc TLB nào bị bỏ lỡ) là ~ 81B mỗi chu kỳ. (Một vòng lặp số nguyên vô hướng có thể duy trì 2 lần tải + 1 cửa hàng mỗi đồng hồ theo thử nghiệm của tôi trên SKL, thực hiện 7 vòng (không sử dụng tên miền) trên mỗi đồng hồ từ 4 vòng miền hợp nhất. Nhưng nó chậm lại một chút với toán hạng 64 bit thay vì 32-bit, vì vậy rõ ràng có một số giới hạn tài nguyên vi kiến ​​trúc và đó không chỉ là vấn đề lập lịch trình các địa chỉ cửa hàng đến cổng 2/3 và đánh cắp các chu kỳ từ tải.)

Làm thế nào để chúng ta tính toán thông lượng của bộ đệm từ các tham số của nó?

Bạn không thể, trừ khi các tham số bao gồm số thông lượng thực tế. Như đã lưu ý ở trên, ngay cả L1D của Skylake cũng không thể theo kịp các đơn vị thực thi tải / lưu trữ của nó cho các vectơ 256b. Mặc dù nó gần và nó có thể cho các số nguyên 32 bit. (Sẽ không có nghĩa là có nhiều đơn vị tải hơn bộ đệm đã đọc hoặc ngược lại. Bạn chỉ cần bỏ phần cứng không bao giờ có thể được sử dụng đầy đủ. Lưu ý rằng L1D có thể có thêm cổng để gửi / nhận dòng / từ các lõi khác, cũng như để đọc / ghi từ bên trong lõi.)

Chỉ cần nhìn vào chiều rộng và dữ liệu của bus không cung cấp cho bạn toàn bộ câu chuyện. Băng thông L2 và L3 (và bộ nhớ) có thể bị giới hạn bởi số lượng lỗi còn thiếu mà L1 hoặc L2 có thể theo dõi . Băng thông không thể vượt quá độ trễ * max_concurrency và các chip có độ trễ L3 cao hơn (như Xeon nhiều lõi) có băng thông L3 lõi đơn ít hơn nhiều so với CPU lõi kép / bốn lõi của cùng một vi kiến ​​trúc. Xem phần "nền tảng giới hạn độ trễ" của câu trả lời SO này . Các CPU thuộc họ Sandybridge có 10 bộ đệm điền dòng để theo dõi các lỗi L1D (cũng được sử dụng bởi các cửa hàng NT).

(Băng thông L3 / bộ nhớ tổng hợp có nhiều lõi hoạt động là rất lớn trên Xeon lớn, nhưng mã đơn luồng thấy băng thông kém hơn so với lõi tứ ở cùng tốc độ xung nhịp vì nhiều lõi hơn có nghĩa là dừng nhiều hơn trên bus vòng, và do đó cao hơn độ trễ L3.)


Độ trễ bộ nhớ cache

Làm thế nào là một tốc độ thậm chí đạt được?

Độ trễ sử dụng tải 4 chu kỳ của bộ đệm L1D là khá tuyệt vời , đặc biệt khi xem xét rằng nó phải bắt đầu với chế độ địa chỉ như thế [rsi + 32], vì vậy nó phải thực hiện thêm trước khi có địa chỉ ảo . Sau đó, nó phải dịch nó sang vật lý để kiểm tra các thẻ bộ đệm cho phù hợp.

(Các chế độ địa chỉ khác ngoài [base + 0-2047]một chu kỳ bổ sung trên gia đình Intel Sandybridge, do đó, có một lối tắt trong AGU cho các chế độ địa chỉ đơn giản (điển hình cho các trường hợp đuổi theo con trỏ trong đó độ trễ sử dụng tải thấp có lẽ là quan trọng nhất, nhưng cũng phổ biến nói chung) . (Xem hướng dẫn tối ưu hóa của Intel , Sandybridge phần 2.3.5.2 L1 DCache.) Điều này cũng giả sử không có ghi đè phân khúc và địa chỉ cơ sở của phân khúc 0là bình thường.)

Nó cũng phải thăm dò bộ đệm của cửa hàng để xem nó có trùng với bất kỳ cửa hàng nào trước đó không. Và nó phải tìm ra điều này ngay cả khi một địa chỉ cửa hàng trước đó (theo thứ tự chương trình) chưa được thực thi, vì vậy địa chỉ cửa hàng chưa được biết đến. Nhưng có lẽ điều này có thể xảy ra song song với việc kiểm tra L1D. Nếu hóa ra dữ liệu L1D không cần thiết vì chuyển tiếp cửa hàng có thể cung cấp dữ liệu từ bộ đệm của cửa hàng, thì điều đó không mất gì.

Intel sử dụng bộ nhớ cache VIPT (Được gắn thẻ vật lý được gắn thẻ vật lý) như hầu hết mọi người khác, sử dụng thủ thuật tiêu chuẩn để có bộ đệm đủ nhỏ và khả năng kết hợp đủ cao để nó hoạt động giống như bộ đệm PIPT (không có bí danh) với tốc độ của VIPT (có thể lập chỉ mục song song với TLB ảo-> tra cứu vật lý).

Bộ nhớ cache L1 của Intel là 32kiB, liên kết 8 chiều. Kích thước trang là 4kiB. Điều này có nghĩa là các bit "chỉ mục" (chọn bộ 8 cách có thể lưu trữ bất kỳ dòng nào đã cho) đều nằm dưới phần bù trang; tức là các bit địa chỉ đó là phần bù vào một trang và luôn giống nhau trong địa chỉ ảo và vật lý.

Để biết thêm chi tiết về điều đó và các chi tiết khác về lý do tại sao bộ đệm nhỏ / nhanh là hữu ích / có thể (và hoạt động tốt khi được kết hợp với bộ đệm chậm lớn hơn), hãy xem câu trả lời của tôi về lý do tại sao L1D nhỏ hơn / nhanh hơn L2 .

Bộ nhớ cache nhỏ có thể thực hiện những việc quá tốn kém trong bộ nhớ cache lớn hơn, như tìm nạp các mảng dữ liệu từ một bộ cùng lúc với tìm nạp thẻ. Vì vậy, một khi bộ so sánh tìm thấy thẻ nào khớp, nó chỉ phải mux một trong tám dòng bộ đệm 64 byte đã được tìm nạp từ SRAM.

(Điều này không thực sự đơn giản: Sandybridge / Ivybridge sử dụng bộ đệm L1D có nhịp, với tám ngân hàng gồm 16 byte. Bạn có thể bị xung đột ngân hàng bộ đệm nếu hai truy cập vào cùng một ngân hàng trong các dòng bộ đệm khác nhau cố gắng thực hiện trong cùng một chu kỳ. (Có 8 ngân hàng, vì vậy điều này có thể xảy ra với nhiều địa chỉ cách nhau 128, tức là 2 dòng bộ đệm.)

IvyBridge cũng không bị phạt khi truy cập không được phân bổ miễn là nó không vượt qua ranh giới dòng bộ đệm 64B. Tôi đoán nó chỉ ra (các) ngân hàng nào sẽ tìm nạp dựa trên các bit địa chỉ thấp và thiết lập bất kỳ sự dịch chuyển nào sẽ cần phải xảy ra để có được 1 đến 16 byte dữ liệu chính xác.

Trên các phân chia dòng bộ đệm, nó vẫn chỉ là một uop duy nhất, nhưng có nhiều truy cập bộ đệm. Hình phạt vẫn còn nhỏ, ngoại trừ chia 4k. Skylake thậm chí chia 4k khá rẻ, với độ trễ khoảng 11 chu kỳ, giống như phân chia dòng bộ đệm thông thường với chế độ địa chỉ phức tạp. Nhưng thông lượng chia 4k kém hơn đáng kể so với phân tách không phân tách cl.


Nguồn :


1
Điều đó rất rõ ràng, đầy đủ và được viết tốt! +1!
hack tiếp theo

8

Trên các CPU hiện đại, bộ nhớ đệm nằm ngay cạnh CPU trên cùng một khuôn (chip) , nó được tạo bằng SRAM , nhanh hơn nhiều so với DRAM được sử dụng cho các mô-đun RAM trong PC.

Mỗi đơn vị bộ nhớ (một bit hoặc byte) SRAM đắt hơn nhiều so với DRAM. Vì vậy, đó là lý do tại sao DRAM cũng được sử dụng trong PC.

Nhưng vì SRAM được sản xuất trong cùng công nghệ với CPU, nên nó nhanh như CPU. Ngoài ra, chỉ có các bus nội bộ (trên CPU) để xử lý vì vậy nếu nó cần phải là một bus rộng 496 dòng thì có lẽ là như vậy.


Cảm ơn sự nhiệt tình của bạn. Tôi đã thấy trong một vài cuốn sách nói rằng tốc độ truy cập của thanh ghi vượt quá 300 GB / giây, trong trường hợp đối với bộ xử lý 3 GHz, thông lượng đăng ký là 100 B / chu kỳ, điều này là không thể vì các thanh ghi thường rộng 64/128 bit, họ không thể sản xuất nhiều như vậy. Đây là những gì liên quan đến tôi. Là GB / sa đúng cách để thể hiện thông lượng.
Hiệp sĩ

3
@Knight hãy nhớ rằng IvB (như bất kỳ bộ xử lý hiệu suất cao nào) thực hiện một số hướng dẫn trong mỗi chu kỳ, chẳng hạn như 3 ALU op, 2 tải và 1 cửa hàng. Hầu hết trong số này có thể mất 2 đầu vào (thậm chí tải, để đánh địa chỉ được lập chỉ mục) và tải thậm chí mất 3. Đó là 13 thanh ghi với 8 byte mỗi, 104 byte (có thể là trường hợp không cho phép kết hợp sử thi như vậy, nhưng ở đó không có dấu hiệu nào cho thấy đó là trường hợp của IvB, mặc dù nó không thể được duy trì). Nếu bạn cũng xem xét các thanh ghi vector, con số đó còn tăng hơn nữa.
harold

@harold: có liên quan: Haswell và Skylake dường như có giới hạn về số lần đọc đăng ký trên mỗi đồng hồ, mặc dù điều đó có thể ở mặt trước và không ảnh hưởng đến việc thực hiện sau khi một số đầu vào sẵn sàng. Có thể đó là một số giới hạn vi kiến ​​trúc khác, nhưng tôi đã tìm thấy các nút thắt trong mã có thể duy trì nhiều op hơn trên mỗi đồng hồ. agner.org/optizes/blog/read.php?i=415#852 . Trên Haswell, trường hợp tốt nhất của tôi đọc ~ 6,5 thanh ghi số nguyên trên mỗi chu kỳ đồng hồ (duy trì). Tôi cũng đã quản lý để có được 7 uops duy trì trên mỗi đồng hồ được gửi / thực hiện trên Skylake (các cửa hàng là địa chỉ cửa hàng + dữ liệu lưu trữ).
Peter Cordes

@PeterCordes phải là front-end mặc dù phải không? IIRC cũng là vấn đề trong lịch sử (PPro đến Core2) và tôi không chắc các số phân số có ý nghĩa khác như thế nào. Mặc dù số của tôi dù sao cũng hơi xa
harold

@harold: yeah, tôi khá chắc chắn rằng đó là một nút cổ chai phía trước của một số loại, có thể là đổi tên. Nút cổ chai đọc đăng ký của P6 là trên các thanh ghi "lạnh" phải được đọc từ tệp đăng ký vĩnh viễn vào ROB có vấn đề. Các thanh ghi được sửa đổi gần đây vẫn còn trong ROB, và không có nút thắt nào về điều đó. Tôi đã không điều tra nhiều với các chế độ lạnh so với nóng trên HSW / SKL, vì một số lý do tôi đã không nghĩ đến việc làm cho vòng lặp của tôi lớn hơn 4 uops / lý tưởng là 1c mỗi lần lặp. Rất tiếc. IDK có bao nhiêu khác biệt giữa chuyển tiếp so với đọc PRF (điều này phải xảy ra tại thời điểm thực hiện, không phải vấn đề / đổi tên).
Peter Cordes

4

Bộ nhớ cache L1 là cấu trúc bộ nhớ khá rộng. Kiến trúc của bộ nhớ cache L1 trong bộ xử lý Intel có thể được tìm thấy trong hướng dẫn này (được cung cấp bởi hack tiếp theo). Tuy nhiên, việc giải thích một số tham số là không chính xác, "kích thước dòng bộ đệm" không phải là "độ rộng dữ liệu", nó là kích thước của khối nối tiếp truy cập dữ liệu nguyên tử.

Bảng 2-17 (phần 2.3.5.1) chỉ ra rằng khi tải (đọc), băng thông bộ đệm là 2x16 = 32 Byte trên mỗi lõi trên mỗi CYCLE . Điều này một mình cung cấp băng thông lý thuyết 96 Gb / s trên lõi 3GHz. Không rõ các báo cáo điểm chuẩn được trích dẫn là gì, có vẻ như nó đo hai lõi hoạt động song song, do đó nó tạo ra 192 Gbps cho hai lõi.


2

Độ trễ cổng là gì? 10 picos giây? Thời gian chu kỳ cho toàn bộ hoạt động của đường ống là 333 picosecond, với các hoạt động giải mã và xe buýt khác nhau và lấy dữ liệu lật trước khi chu kỳ đồng hồ tiếp theo bắt đầu.

Tôi hy vọng hoạt động chậm nhất trong việc đọc bộ đệm đang chờ các datalines di chuyển đủ xa nhau (có thể đây là sự khác biệt: một tham chiếu và một khoản phí thực tế từ bit đọc) mà bộ so sánh / chốt có thể được tạo ra để thực hiện tích cực- hành động phản hồi để chuyển đổi một điện áp nhỏ thành một điện áp xoay mức logic đường ray lớn (khoảng 1 volt).


1
Hãy nhớ rằng độ trễ L1D 4 chu kỳ bao gồm tạo địa chỉ (đối với các chế độ địa chỉ đơn giản [reg + 0-2047]) và tra cứu TLB và so sánh thẻ (liên kết 8 chiều) và đặt các byte không được phân bổ lên đến 16 cổng đầu ra của đơn vị tải, để chuyển tiếp đến các đơn vị thực hiện khác. Đó là độ trễ 4c cho một vòng lặp đuổi theo con trỏ như thế nào mov rax, [rax].
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.