Câu hỏi liên quan

0 Phiếu
5 Câu trả lời
–1 Phiếu
3 Câu trả lời

Chi phí của bộ nhớ truy cập là gì?


+1 Phiếu
Đã hỏi 17/3/2016 bởi Memorize (1,130 điểm)
Chúng tôi giống như để nghĩ rằng một access bộ nhớ nhanh và liên tục, nhưng trên các kiến trúc hiện đại / OSes, mà không nhất thiết phải đúng. Xem xét các đoạn mã C sau:
int i = 34;
int *p = &i;
// do something that may or may not involve i and p
{...}
// 3 days later:
*p = 643;
những gì là ước tính chi phí của nhiệm vụ lần này ở CPU hướng dẫn, nếu
  • i trong bộ nhớ cache L1,
  • i là trong bộ nhớ cache L2,
  • i trong bộ nhớ cache L3,
  • i trong RAM thích hợp,
  • i được paged ra một đĩa SSD,
  • i paged ra cho một ổ đĩa truyền thống?
nơi khác có thể i không? Tất nhiên những con số không tuyệt đối, nhưng tôi chỉ quan tâm đến các đơn đặt hàng của cường độ. Tôi đã cố gắng tìm kiếm các súc, nhưng Google đã không ban phước cho tôi thời gian này.

3 Câu trả lời

+1 Phiếu
Đã trả lời 26/3/2016 bởi web_kaupp (1,540 điểm)
 
Câu trả lời hay nhất
Nó cũng có thể là trong một CPU-đăng ký. C/C++-từ khoá "đăng ký" cho CPU để giữ cho variable trong một đăng ký, nhưng bạn không thể đảm bảo nó sẽ ở lại hoặc thậm chí bao giờ nhận được đó.
Đã bình luận 28/3/2016 bởi ryfimp (800 điểm)
Dude, nếu program của bạn mất ba ngày để chạy bạn đã các vấn đề lớn hơn đáng lo ngại về nó sẽ mất bao lâu để poke thành 'p' <\\humor> :)
+1 Phiếu
Đã trả lời 19/3/2016 bởi maia_that (860 điểm)
Dưới đây là một số con số khó khăn, chứng tỏ rằng timings chính xác khác nhau từ CPU gia đình và đến phiên bản: http://www.agner.org/optimize/ những con số này là một hướng dẫn tốt:
L1           1 ns
L2           5 ns
RAM         83 ns
Disk  13700000 ns
và như là một infograph để cung cấp cho bạn các đơn đặt hàng của các cường độ: Click for the big view (src http://news.ycombinator.com/item?id= 702713 )
Đã bình luận 21/3/2016 bởi nyy_tree (540 điểm)
Uh, nếu nó paged ra chi phí access là nondeterministic...
0 Phiếu
Đã trả lời 26/3/2016 bởi gierHippo (810 điểm)
Miễn là bộ nhớ Cache / RAM /Harddisk/ SSD không phải là bận rộn phục vụ access khác (ví dụ: DMA yêu cầu) và rằng phần cứng là hợp lý đáng tin cậy, thì chi phí là vẫn liên tục (mặc dù họ có thể là một hằng số lớn). Khi bạn nhận được một bộ nhớ cache bỏ lỡ, và bạn phải trang để đĩa cứng đọc biến, sau đó nó là chỉ đơn giản đĩa cứng đọc yêu cầu, chi phí này là rất lớn, như là CPU đã đến: gửi ngắt cho hạt nhân cho đĩa cứng đọc yêu cầu, gửi một yêu cầu cho đĩa cứng, chờ đợi cho đĩa cứng để viết data để RAM, sau đó đọc data từ RAM bộ nhớ cache và để đăng ký một. Tuy nhiên, chi phí này là chi phí vẫn liên tục. Các con số thực tế và tỷ lệ sẽ khác nhau tùy thuộc vào phần cứng của bạn, và về tính tương thích của phần cứng của bạn (ví dụ: nếu CPU của bạn đang chạy trên 2000 Mhz và RAM của bạn gửi data ở 333 Mhz thì họ không đồng bộ rất tốt). Cách duy nhất bạn có thể ra con số này là để test nó trong chương trình của bạn. Và đây không phải là tối ưu hóa sớm, điều này là vi-tối ưu hóa. Hãy để compiler lo lắng về những loại thông tin chi tiết.

ToughDev Q&A là gì?

Trang web hỏi đáp cho các bạn đam mê lập trình, phát triển phần mềm và các vấn đề kỹ thuật khác. Với sự giúp đỡ của bạn, chúng tôi hy vọng sẽ xây dựng thành công một thư viện đầy đủ các câu hỏi và trả lời về tất cả các vấn đề có liên quan đến lập trình!







...