Tại sao thời gian truy cập RAM (bất kỳ loại) giảm chậm như vậy?


22

Bài viết này cho thấy DDR4 SDRAM có băng thông DDR1 SDRAM băng thông rộng hơn khoảng 8 lần. Nhưng thời gian từ khi đặt địa chỉ cột đến khi dữ liệu khả dụng chỉ giảm 10% (13,5ns). Một tìm kiếm nhanh cho thấy thời gian truy cập của async nhanh nhất. SRAM (18 tuổi) là 7ns. Tại sao thời gian truy cập SDRAM giảm chậm như vậy? Là lý do kinh tế, công nghệ, hoặc cơ bản?


1
Có thể một lý do có thể khác là nó đơn giản là không cần thiết?
Sebastiaan van den Broek

Ví dụ, thời gian truy cập thấp là cần thiết để làm cho tìm kiếm dữ liệu trong bộ nhớ nhanh hơn.
Arseniy

Tôi nhận ra rằng, tốc độ tăng thêm luôn tốt, nhưng xuất phát từ góc độ nhà phát triển phần mềm, có lẽ so với tất cả các IO và kiến ​​trúc khác (bao gồm cả các dịch vụ siêu nhỏ có thể chạy trên các trung tâm dữ liệu khác nhau), tốc độ RAM không phải là một điểm nghẽn nữa không. Đôi khi, "đủ tốt" là tốt, hoặc ít nhất là không đảm bảo R & D thêm vào để tăng tốc nó. Tôi sẽ xem xét thêm rằng đó là một lý do tiềm năng trong câu hỏi của bạn quá.
Sebastiaan van den Broek

1
Theo Wikipedia DDR3-2200 có độ trễ Word đầu tiên là 6,36 ns, đó là khoảng thời gian để tín hiệu truyền đi khoảng 3ft trên FR4, tôi sẽ nói rằng chúng ta khá gần với giới hạn vật lý
Mark Omo

Câu trả lời:


33

Đó là bởi vì việc tăng băng thông của DRAM dễ dàng và rẻ hơn so với việc giảm độ trễ. Để có được dữ liệu từ một hàng ram mở, một khối lượng công việc không hề nhỏ là cần thiết.

Địa chỉ cột cần được giải mã, các mux chọn dòng cần truy cập cần được điều khiển và dữ liệu cần di chuyển qua chip đến bộ đệm đầu ra. Điều này cần một chút thời gian, đặc biệt là các chip SDRAM được sản xuất theo quy trình phù hợp với mật độ ram cao và tốc độ logic không cao. Để tăng băng thông bằng cách sử dụng DDR (1,2,3 hoặc 4), hầu hết logic có thể được mở rộng hoặc đường ống và có thể hoạt động ở cùng tốc độ như ở thế hệ trước. Điều duy nhất cần phải nhanh hơn là trình điều khiển I / O cho các chân DDR.

Ngược lại, để giảm độ trễ, toàn bộ thao tác cần được tăng tốc, khó hơn nhiều. Nhiều khả năng, các bộ phận của ram sẽ cần phải được thực hiện trên một quy trình tương tự như đối với CPU tốc độ cao, làm tăng đáng kể chi phí (quy trình tốc độ cao đắt hơn, cộng với mỗi chip cần trải qua 2 quy trình khác nhau).

Nếu bạn so sánh bộ nhớ CPU với RAM và ổ cứng / SSD, sẽ có mối quan hệ nghịch đảo giữa dung lượng lưu trữ lớn và dung lượng lưu trữ nhanh. Một L1 $ rất nhanh, nhưng chỉ có thể chứa từ 32 đến 256kB dữ liệu. Lý do nó nhanh như vậy là vì nó nhỏ:

  • Nó có thể được đặt rất gần với CPU bằng cách sử dụng nó, có nghĩa là dữ liệu phải di chuyển một quãng đường ngắn hơn để đến được nó
  • Các dây trên nó có thể được làm ngắn hơn, một lần nữa có nghĩa là mất ít thời gian hơn để dữ liệu truyền qua nó
  • Nó không chiếm nhiều diện tích hoặc nhiều bóng bán dẫn, do đó, làm cho nó ở quy trình tối ưu hóa tốc độ và sử dụng nhiều năng lượng trên mỗi bit được lưu trữ không phải là quá đắt

Khi bạn di chuyển lên cấu trúc phân cấp, mỗi tùy chọn lưu trữ sẽ có dung lượng lớn hơn, nhưng cũng có diện tích lớn hơn và cách xa thiết bị sử dụng nó, nghĩa là thiết bị phải chậm hơn.


21
Câu trả lời chính xác. Tôi chỉ muốn nhấn mạnh đến yếu tố khoảng cách vật lý: có thể là 10cm cho thanh RAM xa nhất, 1/3 đến 1/2 tốc độ ánh sáng như tốc độ tín hiệu, cộng thêm một số chiều dài để định tuyến và khớp với các rãnh PCB, bạn có thể dễ dàng có mặt tại thời điểm chuyến đi 2ns. Nếu ~ 15% sự chậm trễ của bạn là do giới hạn tốc độ phổ quát không thể phá vỡ ... theo ý kiến ​​của tôi thì bạn đang làm rất tốt.
mbrig

1
L1 cũng được tổ chức duy nhất, trực tiếp trong lõi sử dụng nó và sử dụng SRAM.
rừng

@forest Và cũng có giới hạn kích thước khá nghiêm ngặt - làm cho nó quá lớn và không có cách nào để giữ cho nó quá nhanh.
Luaan

Bộ nhớ cache L1d cũng có thể được tối ưu hóa mạnh mẽ cho độ trễ, ví dụ: tìm nạp thẻ và dữ liệu song song cho tất cả các cách trong bộ. Vì vậy, khi một thẻ khớp chỉ cần chuyển dữ liệu vào đầu ra, thay vì phải tìm nạp nó từ SRAM. Điều này cũng có thể xảy ra song song với việc tra cứu TLB trên các bit cao của địa chỉ, nếu tất cả các bit chỉ mục đến từ phần bù trong trang của một địa chỉ. (Vì vậy, đó là một giới hạn cứng về kích thước, như @Luaan đã đề cập: kích thước / mức độ kết hợp <= kích thước trang để VIPT = hack tốc độ PIPT này hoạt động. Xem Bộ nhớ cache VIPT: Kết nối giữa TLB & Cache? )
Peter Cordes

6

C_Elegans cung cấp một phần của câu trả lời - thật khó để giảm độ trễ chung của một chu kỳ bộ nhớ.

Một phần khác của câu trả lời là trong các hệ thống bộ nhớ phân cấp hiện đại (nhiều cấp bộ nhớ đệm), băng thông bộ nhớ có ảnh hưởng mạnh hơn nhiều đến hiệu năng hệ thống tổng thể so với độ trễ của bộ nhớ , và đó là nơi tập trung tất cả các nỗ lực phát triển mới nhất.

Điều này đúng trong cả điện toán chung, trong đó nhiều tiến trình / luồng đang chạy song song, cũng như các hệ thống nhúng. Ví dụ, trong công việc video HD mà tôi làm, tôi không quan tâm đến độ trễ theo thứ tự mili giây, nhưng tôi cần nhiều gigabyte / giây băng thông.


Và chắc chắn phải đề cập rằng phần mềm có thể được thiết kế cho độ trễ "cao" khá dễ dàng trong hầu hết các trường hợp, so với độ khó và chi phí giảm độ trễ. Cả CPU và phần mềm của chúng đều rất tốt trong việc loại bỏ độ trễ hiệu quả trong hầu hết các trường hợp. Cuối cùng, bạn không đạt đến giới hạn độ trễ như bạn nghĩ, trừ khi bạn không biết gì về cách kiến ​​trúc bộ nhớ và bộ nhớ đệm / tìm nạp trước CPU, v.v. Cách tiếp cận đơn giản thường hoạt động đủ tốt cho hầu hết các phần mềm, đặc biệt là đơn luồng.
Luaan

Trên các CPU Intel hiện đại, độ trễ bộ nhớ là yếu tố giới hạn đối với băng thông lõi đơn : băng thông không thể vượt quá max_concurrency / độ trễ và một lõi có khả năng giới hạn cho các yêu cầu ngoài lõi cùng một lúc. Một Xeon nhiều lõi (có độ trễ uncore cao hơn từ nhiều bước nhảy trên bus vòng) có băng thông lõi đơn kém hơn so với chip máy tính để bàn bốn lõi, mặc dù có nhiều bộ điều khiển DRAM hơn. Tại sao Skylake lại tốt hơn Broadwell-E cho thông lượng bộ nhớ đơn luồng? . Phải mất nhiều luồng hơn để B / W bộ nhớ bão hòa trên Xeon nhiều lõi.
Peter Cordes

Nhìn chung, quan điểm chính của bạn là chính xác: hầu hết các truy cập đều nhấn vào bộ đệm trong thời gian trễ thấp để tránh bị đình trệ trong trật tự phía sau. Tìm nạp trước CT chủ yếu chỉ cần băng thông để theo kịp các truy cập tuần tự và có sẵn dữ liệu trong bộ đệm trước khi lõi cần. Độ trễ DRAM là hàng trăm chu kỳ xung nhịp lõi, vì vậy phần mềm hiệu quả phải được điều chỉnh để sử dụng các mẫu truy cập không bỏ lỡ bộ nhớ cache bằng cách đánh bại cả địa phương / thời gian và tìm nạp trước CTNH. Đặc biệt đối với tải, bởi vì bộ đệm của cửa hàng có thể tách rời độ trễ của cửa hàng khỏi phần còn lại của phụ trợ không theo thứ tự.
Peter Cordes

Đối với I / O của đĩa, độ trễ của mili giây sẽ là vấn đề nếu chúng ta không đọc trước tìm nạp để ẩn nó để truy cập tuần tự. Nhưng độ trễ càng cao thì càng khó che giấu. (Các thuật toán tìm nạp trước của bạn càng cần phải tốt hơn và các mẫu truy cập của bạn càng dễ dự đoán hơn.) Và càng nhiều yêu cầu / byte dữ liệu bạn cần giữ trong chuyến bay để có được băng thông bạn muốn.
Peter Cordes

2

Tôi không có nhiều hiểu biết, nhưng tôi hy vọng nó là một chút của tất cả.

Thuộc kinh tế

Đối với phần lớn máy tính / điện thoại, tốc độ là quá đủ. Để lưu trữ dữ liệu nhanh hơn, SSD đã được phát triển. Mọi người có thể sử dụng video / âm nhạc và các tác vụ chuyên sâu tốc độ khác trong (gần như) thời gian thực. Vì vậy, không cần quá nhiều tốc độ (ngoại trừ các ứng dụng cụ thể như dự báo thời tiết, v.v.).

Một lý do khác là để xử lý tốc độ RAM rất cao, CPU cần thiết rất nhanh. Và điều này đi kèm với rất nhiều sử dụng năng lượng. Vì xu hướng sử dụng chúng trong các thiết bị pin (như điện thoại di động), ngăn chặn việc sử dụng RAM rất nhanh (và CPU), do đó làm cho nó cũng không hữu ích về mặt kinh tế để tạo ra chúng.

Kỹ thuật

Bằng cách giảm kích thước của chip / IC (mức độ bây giờ), tốc độ tăng lên, nhưng không đáng kể. Nó thường được sử dụng để tăng dung lượng RAM, điều này cần thiết hơn (cũng là một lý do kinh tế).

Cơ bản

Ví dụ (cả hai đều là mạch): cách dễ nhất để có thêm tốc độ (được sử dụng bởi SSD), là chỉ cần truyền tải trên nhiều thành phần, theo cách này, tốc độ 'xử lý' cũng tăng lên. So sánh sử dụng 8 thanh USB đọc cùng một lúc và kết hợp các kết quả, thay vì đọc dữ liệu từ 1 thanh USB sau nhau (mất 8 lần thời gian).


1
Chính xác thì SSD phải làm gì với độ trễ SDRAM?
C_Elegans

@C_Elegans cả hai đều là mạch, cho câu hỏi 'chung chung' này tôi không nghĩ có quá nhiều sự khác biệt.
Michel Keijzers

2
Lượng thời gian để mở một trang thực sự không giảm nhiều do chu kỳ nạp tiền; lượng năng lượng cần thiết không khác biệt đáng kể so với một thập kỷ trước. Điều đó chi phối thời gian truy cập theo kinh nghiệm của tôi.
Peter Smith

5
@MichelKeijzers Mặc dù cả hai đều là mạch, SSD và SDRAM phục vụ các trường hợp sử dụng rất khác nhau và sử dụng các kỹ thuật khác nhau để lưu trữ dữ liệu. Ngoài ra, nói rằng CPU không thực sự cần RAM nhanh hơn không có ý nghĩa gì, toàn bộ lý do hầu hết các CPU hiện đại có 3 mức lưu trữ là do ram của chúng không thể được tạo ra đủ nhanh để phục vụ CPU.
C_Elegans

1
Bạn nói để lưu trữ lớn hơn có SSD. Ý bạn là nhanh hơn ? Nó đắt hơn để có cùng dung lượng lưu trữ trong một ssd so với một hdd. Điểm bán hàng chính của SSD là tốc độ, và có lẽ là tiếng ồn và độ tin cậy. Về dung lượng, ổ cứng vẫn tốt hơn
user198712
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.