Chi phí gần đúng để truy cập bộ nhớ cache khác nhau và bộ nhớ chính?


178

Bất cứ ai cũng có thể cho tôi thời gian gần đúng (tính bằng nano giây) để truy cập vào bộ nhớ cache L1, L2 và L3, cũng như bộ nhớ chính trên bộ xử lý Intel i7?

Mặc dù đây không phải là một câu hỏi lập trình cụ thể, nhưng việc biết các loại chi tiết tốc độ này là không cần thiết đối với một số thách thức lập trình có độ trễ thấp.



1
Làm cách nào để chuyển đổi ns thành chu kỳ? Nếu tôi chỉ đơn giản chia 100 ns cho 2,3 GHz, tôi nhận được 230 chu kỳ. Điều này có đúng không?
Nathan

5
Tôi tò mò: Trong tình huống nào thì bộ đệm L3 từ xa chậm hơn DRAM từ xa? Con số ở trên chỉ ra rằng nó có thể chậm 1,6 lần.
netvope

1
Vui lòng không chỉnh sửa câu hỏi mà thay vào đó hãy đăng câu trả lời với những chi tiết đó. Tự trả lời là ok trên SO.
Stijn de Witt

Có bất kỳ giá trị gần đúng nào cho mức tiêu thụ năng lượng để truy cập bộ nhớ từ mỗi cấp không?
kanna

Câu trả lời:


74

Dưới đây là Hướng dẫn phân tích hiệu suất cho bộ vi xử lý i7 và Xeon. Tôi nên nhấn mạnh, điều này có những gì bạn cần và hơn thế nữa (ví dụ: kiểm tra trang 22 để biết một số thời gian và chu kỳ chẳng hạn).

Ngoài ra, trang này có một số chi tiết về chu kỳ đồng hồ, vv Liên kết thứ hai phục vụ các số sau:

Core i7 Xeon 5500 Series Data Source Latency (approximate)               [Pg. 22]

local  L1 CACHE hit,                              ~4 cycles (   2.1 -  1.2 ns )
local  L2 CACHE hit,                             ~10 cycles (   5.3 -  3.0 ns )
local  L3 CACHE hit, line unshared               ~40 cycles (  21.4 - 12.0 ns )
local  L3 CACHE hit, shared line in another core ~65 cycles (  34.8 - 19.5 ns )
local  L3 CACHE hit, modified in another core    ~75 cycles (  40.2 - 22.5 ns )

remote L3 CACHE (Ref: Fig.1 [Pg. 5])        ~100-300 cycles ( 160.7 - 30.0 ns )

local  DRAM                                                   ~60 ns
remote DRAM                                                  ~100 ns

EDIT2:
Điều quan trọng nhất là thông báo dưới bảng trích dẫn, cho biết:

"Chú ý: Những giá trị này THÔ xấp xỉ. Họ phụ thuộc vào CORE VÀ Uncore TẦN, tốc độ bộ nhớ, BIOS CÀI ĐẶT, số lượng DIMMS , ETC, ETC .. mileage của bạn có thể thay đổi. "

EDIT: Tôi nên nhấn mạnh rằng, cũng như thông tin về thời gian / chu kỳ, tài liệu intel ở trên giải quyết nhiều chi tiết hữu ích (cực kỳ) của bộ xử lý i7 và Xeon (từ quan điểm hiệu suất).


1
Không nên 'dòng không chia sẻ' có độ trễ nhiều hơn 'dòng chia sẻ trong lõi khác' - một dòng dùng chung (tức là 2 bit hợp lệ lõi) có nghĩa là nó có thể được lấy trực tiếp từ lát LLC vì nó được đảm bảo sạch. 'Dòng không chia sẻ' có nghĩa là chỉ có một bit hợp lệ và lõi đó phải được rình mò để đảm bảo rằng dòng này là độc quyền và không bị sửa đổi - nếu nó bị sửa đổi thì nó được thay đổi thành chia sẻ; LLC bây giờ trở nên bẩn và nó được trả về lõi yêu cầu như được chia sẻ. Có lẽ tôi sai - tôi biết giao thức MOESI khác.
Lewis Kelsey

1
Chắc chắn đây là trường hợp trong SnB và Haswell. Nehalem - cái mà Xeon này sử dụng - có trước cấu trúc liên kết bus vòng và có bộ đệm hợp nhất nhưng tôi không hiểu tại sao bộ lọc snoop lại hoạt động khác biệt trong Nehalem. Phần hướng dẫn tối ưu hóa B.3.5.3 đưa ra những gì tôi cảm thấy giống như một mô tả không chính xác (nó rõ ràng liên quan đến Nehalem khi nó nói về Hàng đợi toàn cầu là một tính năng của Nehalem). Bài viết Haswell này có một mô tả tốt hơn (cột trên cùng bên phải của trang 5) ( tu-dresden.de/zih/forschung/ressourcen/dateien/ọ )
Lewis Kelsey

@LewisKelsey: Điều này cũng gây ngạc nhiên cho tôi, bởi vì tôi nghĩ rằng một nửa điểm bao gồm L3 là L3 có thể trả lời đơn giản nếu nó có một bản sao hợp lệ của một dòng. Nhưng hãy nhớ rằng, Intel sử dụng MESIF ( en.wikipedia.org/wiki/MESIF_protatio ) cho NUMA, AMD sử dụng MOESI. Tuy nhiên, tôi nghĩ rằng trong một ổ cắm duy nhất, MESIF không thực sự là một vấn đề vì dữ liệu đến từ L3, không phải lõi-> lõi. Vì vậy, nó có thể phù hợp hơn với bộ đệm L3-> chuyển bộ đệm qua các ổ cắm. Tôi tự hỏi nếu "hit L3 cục bộ" này là dành cho một dòng được chia sẻ với lõi trong một ổ cắm khác? Vẫn không có ý nghĩa, hợp lệ trong L3 có nghĩa là không có lõi nào có E / M
Peter Cordes

@PeterCordes Tôi nhớ bình luận này và quay lại và những gì tôi nói vừa xuất hiện là ngay lập tức sai với tôi. Nhận xét của tôi là đúng theo quan điểm của lõi thứ 3, nơi nó được chia sẻ giữa 2 lõi khác hoặc chỉ dành riêng cho một lõi khác. Nhưng nếu bạn đang nói về dòng không được chia sẻ và nó thuộc về cốt lõi đang cố gắng truy cập vào dòng, thì điểm chuẩn là đúng bởi vì chia sẻ yêu cầu RFO để có được nó độc quyền và độc quyền có nghĩa là không cần RFO như vậy. Vì vậy, tôi không biết những gì tôi đã nói thực sự.
Lewis Kelsey

@LewisKelsey: Vâng, tất cả đều đúng khi viết. Tôi nghĩ rằng điều này là để đọc ( Độ trễ nguồn dữ liệu ), độ nhạy nhạy hơn. Đọc một dòng không bao giờ yêu cầu RFO, chỉ cần một yêu cầu để chia sẻ. Vì vậy, không phải là một dòng đã ở trạng thái Chia sẻ ở đâu đó, chỉ cần nhấn vào L3 của ổ cắm này mà không phải chờ lưu lượng truy cập kết hợp? Và do đó nhanh hơn DRAM, tương tự như lần truy cập L3 "không chia sẻ".
Peter Cordes

189

Những con số mọi người nên biết

           0.5 ns - CPU L1 dCACHE reference
           1   ns - speed-of-light (a photon) travel a 1 ft (30.5cm) distance
           5   ns - CPU L1 iCACHE Branch mispredict
           7   ns - CPU L2  CACHE reference
          71   ns - CPU cross-QPI/NUMA best  case on XEON E5-46*
         100   ns - MUTEX lock/unlock
         100   ns - own DDR MEMORY reference
         135   ns - CPU cross-QPI/NUMA best  case on XEON E7-*
         202   ns - CPU cross-QPI/NUMA worst case on XEON E7-*
         325   ns - CPU cross-QPI/NUMA worst case on XEON E5-46*
      10,000   ns - Compress 1K bytes with Zippy PROCESS
      20,000   ns - Send 2K bytes over 1 Gbps NETWORK
     250,000   ns - Read 1 MB sequentially from MEMORY
     500,000   ns - Round trip within a same DataCenter
  10,000,000   ns - DISK seek
  10,000,000   ns - Read 1 MB sequentially from NETWORK
  30,000,000   ns - Read 1 MB sequentially from DISK
 150,000,000   ns - Send a NETWORK packet CA -> Netherlands
|   |   |   |
|   |   | ns|
|   | us|
| ms|

Từ: Nguyên văn bởi Peter Norvig:
- http://norvig.com/21-days.html#answers
- http://surana.wordpress.com/2009/01/01/numbers-everyone-should-ledge/ ,
- http://sites.google.com.vn/site/io/building-scalable-web-appluggest-with-google-app-engine

một so sánh trực quan


11
Chắc chắn những thứ này rất quan tâm, dựa trên thiết kế bộ xử lý, độ trễ / tần số ram, bộ nhớ đệm đĩa cứng (cả loại và kích thước) / vòng / phút, v.v.? Để trích dẫn INTEL (đối với các giá trị mà họ đã phát hành cho một CPU cụ thể): "LƯU Ý: Các giá trị này là xấp xỉ thô. Chúng phụ thuộc vào Tần số lõi và Uncore, Tốc độ bộ nhớ, Cài đặt BIOS, Số DIMMS, v.v. . "
Dave

28
@Dave đó là sự thật, nhưng những con số này cho thấy thứ tự cường độ
Andrey

8
@Dave, mặc dù loại / tốc độ / kiến ​​trúc của cpu khác nhau, tôi tin rằng thời gian tương đối sẽ gần như giữ nguyên, vì vậy đây chỉ là một hướng dẫn sơ bộ để biết khi nào bạn viết mã. Tất nhiên, phân tích có ý nghĩa hơn nên được thực hiện thông qua profiler ...
xosp7tom

8
Để có một ý tưởng về thời gian của nó, Wikipedia đề cập đến "Một nano giây là một giây như một giây là 31,7 năm." vi.wikipedia.org/wiki/Nanosecond
Only You

1
@kernel nếu có bộ nhớ cache thì có nghĩa là nó sẽ yêu cầu quyền truy cập bộ đệm cấp thấp hơn hoặc thậm chí bộ nhớ chính. Trong trường hợp này, nó sẽ mất thời gian theo thời gian truy cập cấp đó. Bạn có thể tìm dữ liệu cho các CPU mới hơn tại đây sisoftware.net/?d=qa&f=ben_mem_latency
Andrey

39

Chi phí để truy cập các ký ức khác nhau trong một trang đẹp

Tóm lược

  1. Giá trị đã giảm nhưng ổn định từ năm 2005

            1 ns        L1 cache
            3 ns        Branch mispredict
            4 ns        L2 cache
           17 ns        Mutex lock/unlock
          100 ns        Main memory (RAM)
        2 000 ns (2µs)  1KB Zippy-compress
    
  2. Vẫn còn một số cải tiến, dự đoán cho năm 2020

       16 000 ns (16µs) SSD random read (olibre's note: should be less)
      500 000 ns (½ms)  Round trip in datacenter
    2 000 000 ns (2ms)  HDD random read (seek)
    

Xem thêm các nguồn khác

Xem thêm

Để hiểu rõ hơn, tôi khuyên bạn nên trình bày tuyệt vời các kiến ​​trúc bộ đệm hiện đại (tháng 6 năm 2014) từ Gerhard Wellein , Hannes HofmannDietmar Fey tại Đại học Erlangen-Nürnberg .

Những người nói tiếng Pháp có thể đánh giá cao một bài viết của SpaceFox so sánh bộ xử lý với nhà phát triển cả hai đang chờ thông tin cần thiết để tiếp tục hoạt động.


một bài đăng độ trễ đáng yêu. sẽ là tốt để thêm các sự thật về thực tế che giấu độ trễ GPU (
user3666197

Hi @ user3666197 Bạn có một số nguồn về độ trễ bộ nhớ liên quan đến GPU không? Chúc mừng :-)
olibre

Chắc chắn, vâng, @olibre. Kiểm tra [A]đăng dưới đây.
user3666197

1
Cho biết điều này liên quan đến độ trễ và bộ nhớ đệm, tôi thấy thật mỉa mai khi trang ở liên kết đầu tiên của bạn, với thanh trượt năm, không lưu trữ hiển thị số liệu khi thay đổi năm. Trong Firefox, ít nhất, chúng hiển thị quá chậm để kéo dài qua nhiều năm để được suôn sẻ: /
John Glassmyer

1
Tài liệu tham khảo tốt đẹp, bạn đã cho tiêu đề và tác giả!
SamB

22

Chỉ vì lợi ích của năm 2020 xem xét các dự đoán cho năm 2025:

Khoảng 44 năm cuối cùng của công nghệ mạch tích hợp, bộ xử lý cổ điển (không lượng tử) đã phát triển, theo nghĩa đen và vật lý "Per Aspera ad Astra" . Thập kỷ vừa qua đã chứng minh, quá trình cổ điển đã tiến gần đến một số rào cản, không có con đường vật lý có thể đạt được về phía trước.

Number of logical corescó thể và có thể phát triển, nhưng không quá khó nếu không thể phá vỡ trần dựa trên vật lý đã có thể phát triển và có thể phát triển, nhưng ít hơn (công suất, tiếng ồn, "đồng hồ") có thể phát triển, nhưng vấn đề về phân phối điện & tản nhiệt sẽ tăng có thể phát triển, có lợi ích trực tiếp từ dấu chân bộ nhớ cache lớn và lợi ích I / O & bộ nhớ nhanh hơn và rộng hơn từ việc chuyển đổi ngữ cảnh ít bị ép buộc bởi hệ thống vì chúng ta có thể có nhiều lõi hơn để phân chia các luồng / quy trình khácO(n^2~3)
Frequency [MHz]
Transistor CountO(n^2~3)
Power [W]
Single Thread Perf

Tín dụng cho Leonardo Suriano & Karl Rupp
(Tín dụng cho Leonardo Suriano & Karl Rupp)

2020: Still some improvements, prediction for 2025
-------------------------------------------------------------------------
             0.1 ns - NOP
             0.3 ns - XOR, ADD, SUB
             0.5 ns - CPU L1 dCACHE reference           (1st introduced in late 80-ies )
             0.9 ns - JMP SHORT
             1   ns - speed-of-light (a photon) travel a 1 ft (30.5cm) distance -- will stay, throughout any foreseeable future :o)
?~~~~~~~~~~~ 1   ns - MUL ( i**2 = MUL i, i )~~~~~~~~~ doing this 1,000 x is 1 [us]; 1,000,000 x is 1 [ms]; 1,000,000,000 x is 1 [s] ~~~~~~~~~~~~~~~~~~~~~~~~~
           3~4   ns - CPU L2  CACHE reference           (2020/Q1)
             5   ns - CPU L1 iCACHE Branch mispredict
             7   ns - CPU L2  CACHE reference
            10   ns - DIV
            19   ns - CPU L3  CACHE reference           (2020/Q1 considered slow on 28c Skylake)
            71   ns - CPU cross-QPI/NUMA best  case on XEON E5-46*
           100   ns - MUTEX lock/unlock
           100   ns - own DDR MEMORY reference
           135   ns - CPU cross-QPI/NUMA best  case on XEON E7-*
           202   ns - CPU cross-QPI/NUMA worst case on XEON E7-*
           325   ns - CPU cross-QPI/NUMA worst case on XEON E5-46*
|Q>~~~~~ 5,000   ns - QPU on-chip QUBO ( quantum annealer minimiser 1 Qop )
        10,000   ns - Compress 1K bytes with a Zippy PROCESS
        20,000   ns - Send     2K bytes over 1 Gbps  NETWORK
       250,000   ns - Read   1 MB sequentially from  MEMORY
       500,000   ns - Round trip within a same DataCenter
?~~~ 2,500,000   ns - Read  10 MB sequentially from  MEMORY~~(about an empty python process to copy on spawn)~~~~ x ( 1 + nProcesses ) on spawned process instantiation(s), yet an empty python interpreter is indeed not a real-world, production-grade use-case, is it?
    10,000,000   ns - DISK seek
    10,000,000   ns - Read   1 MB sequentially from  NETWORK
?~~ 25,000,000   ns - Read 100 MB sequentially from  MEMORY~~(somewhat light python process to copy on spawn)~~~~ x ( 1 + nProcesses ) on spawned process instantiation(s)
    30,000,000   ns - Read 1 MB sequentially from a  DISK
?~~ 36,000,000   ns - Pickle.dump() SER a 10 MB object for IPC-transfer and remote DES in spawned process~~~~~~~~ x ( 2 ) for a single 10MB parameter-payload SER/DES + add an IPC-transport costs thereof or NETWORK-grade transport costs, if going into [distributed-computing] model Cluster ecosystem
   150,000,000   ns - Send a NETWORK packet CA -> Netherlands
  |   |   |   |
  |   |   | ns|
  |   | us|
  | ms|

Chỉ vì một đánh giá của năm 2015 về các dự đoán cho năm 2020:

Still some improvements, prediction for 2020 (Ref. olibre's answer below)
-------------------------------------------------------------------------
   16 000 ns ( 16 µs) SSD random read (olibre's note: should be less)
  500 000 ns (  ½ ms) Round trip in datacenter
2 000 000 ns (  2 ms) HDD random read (seek)

In 2015 there are currently available:
========================================================================
      820 ns ( 0.8µs)     random read from a SSD-DataPlane
    1 200 ns ( 1.2µs) Round trip in datacenter
    1 200 ns ( 1.2µs)     random read from a HDD-DataPlane

Chỉ vì mục đích so sánh cảnh quan độ trễ của CPU và GPU:

Không phải là một nhiệm vụ dễ dàng để so sánh ngay cả các dòng CPU / bộ đệm / DRAM đơn giản nhất (ngay cả trong mô hình truy cập bộ nhớ thống nhất), trong đó tốc độ DRAM là một yếu tố để xác định độ trễ và độ trễ được tải (hệ thống bão hòa), trong đó các quy tắc sau và một cái gì đó các ứng dụng doanh nghiệp sẽ trải nghiệm nhiều hơn một hệ thống không tải hoàn toàn nhàn rỗi.

                    +----------------------------------- 5,6,7,8,9,..12,15,16 
                    |                               +--- 1066,1333,..2800..3300
                    v                               v
First  word = ( ( CAS latency * 2 ) + ( 1 - 1 ) ) / Data Rate  
Fourth word = ( ( CAS latency * 2 ) + ( 4 - 1 ) ) / Data Rate
Eighth word = ( ( CAS latency * 2 ) + ( 8 - 1 ) ) / Data Rate
                                        ^----------------------- 7x .. difference
******************************** 
So:
===

resulting DDR3-side latencies are between _____________
                                          3.03 ns    ^
                                                     |
                                         36.58 ns ___v_ based on DDR3 HW facts

Truy cập bộ nhớ thống nhất

Các công cụ GPU đã nhận được rất nhiều tiếp thị kỹ thuật, trong khi phụ thuộc nội bộ sâu sắc là chìa khóa để hiểu cả điểm mạnh thực sự và cũng là điểm yếu thực sự mà các kiến ​​trúc sư này trải nghiệm trong thực tế (điển hình khác nhiều so với kỳ vọng tiếp thị rầm rộ).

   1 ns _________ LETS SETUP A TIME/DISTANCE SCALE FIRST:
          °      ^
          |\     |a 1 ft-distance a foton travels in vacuum ( less in dark-fibre )
          | \    |
          |  \   |
        __|___\__v____________________________________________________
          |    |
          |<-->|  a 1 ns TimeDOMAIN "distance", before a foton arrived
          |    |
          ^    v 
    DATA  |    |DATA
    RQST'd|    |RECV'd ( DATA XFER/FETCH latency )

  25 ns @ 1147 MHz FERMI:  GPU Streaming Multiprocessor REGISTER access
  35 ns @ 1147 MHz FERMI:  GPU Streaming Multiprocessor    L1-onHit-[--8kB]CACHE

  70 ns @ 1147 MHz FERMI:  GPU Streaming Multiprocessor SHARED-MEM access

 230 ns @ 1147 MHz FERMI:  GPU Streaming Multiprocessor texL1-onHit-[--5kB]CACHE
 320 ns @ 1147 MHz FERMI:  GPU Streaming Multiprocessor texL2-onHit-[256kB]CACHE

 350 ns
 700 ns @ 1147 MHz FERMI:  GPU Streaming Multiprocessor GLOBAL-MEM access
 - - - - -

Hiểu nội bộ vì thế quan trọng hơn nhiều so với các lĩnh vực khác, nơi các kiến ​​trúc được công bố và nhiều điểm chuẩn có sẵn miễn phí. Rất cám ơn những người kiểm tra GPU-micro, những người đã dành thời gian và sự sáng tạo của họ để giải phóng sự thật về các kế hoạch làm việc thực sự bên trong phương pháp tiếp cận hộp đen đã thử nghiệm các thiết bị GPU.

    +====================| + 11-12 [usec] XFER-LATENCY-up   HostToDevice    ~~~ same as Intel X48 / nForce 790i
    |   |||||||||||||||||| + 10-11 [usec] XFER-LATENCY-down DeviceToHost
    |   |||||||||||||||||| ~  5.5 GB/sec XFER-BW-up                         ~~~ same as DDR2/DDR3 throughput
    |   |||||||||||||||||| ~  5.2 GB/sec XFER-BW-down @8192 KB TEST-LOAD      ( immune to attempts to OverClock PCIe_BUS_CLK 100-105-110-115 [MHz] ) [D:4.9.3]
    |                       
    |              Host-side
    |                                                        cudaHostRegister(   void *ptr, size_t size, unsigned int flags )
    |                                                                                                                 | +-------------- cudaHostRegisterPortable -- marks memory as PINNED MEMORY for all CUDA Contexts, not just the one, current, when the allocation was performed
    |                        ___HostAllocWriteCombined_MEM / cudaHostFree()                                           +---------------- cudaHostRegisterMapped   -- maps  memory allocation into the CUDA address space ( the Device pointer can be obtained by a call to cudaHostGetDevicePointer( void **pDevice, void *pHost, unsigned int flags=0 ); )
    |                        ___HostRegisterPORTABLE___MEM / cudaHostUnregister( void *ptr )
    |   ||||||||||||||||||
    |   ||||||||||||||||||
    |   | PCIe-2.0 ( 4x) | ~ 4 GB/s over  4-Lanes ( PORT #2  )
    |   | PCIe-2.0 ( 8x) | ~16 GB/s over  8-Lanes
    |   | PCIe-2.0 (16x) | ~32 GB/s over 16-Lanes ( mode 16x )
    |
    |   + PCIe-3.0 25-port 97-lanes non-blocking SwitchFabric ... +over copper/fiber
    |                                                                       ~~~ The latest PCIe specification, Gen 3, runs at 8Gbps per serial lane, enabling a 48-lane switch to handle a whopping 96 GBytes/sec. of full duplex peer to peer traffic. [I:]
    |
    | ~810 [ns]    + InRam-"Network" / many-to-many parallel CPU/Memory "message" passing with less than 810 ns latency any-to-any
    |
    |   ||||||||||||||||||
    |   ||||||||||||||||||
    +====================|
    |.pci............HOST|

Lời xin lỗi của tôi về một "bức tranh lớn hơn", nhưng việc giảm độ trễ cũng có các giới hạn chính được áp đặt từ các công suất smREG / L1 / L2 trên chip và tỷ lệ trúng / sai.

    |.pci............GPU.|
    |                    | FERMI [GPU-CLK] ~ 0.9 [ns] but THE I/O LATENCIES                                                                  PAR -- ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| <800> warps ~~ 24000 + 3200 threads ~~ 27200 threads [!!]
    |                                                                                                                                               ^^^^^^^^|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [!!]
    |                                                       smREGs________________________________________ penalty +400 ~ +800 [GPU_CLKs] latency ( maskable by 400~800 WARPs ) on <Compile-time>-designed spillover(s) to locMEM__
    |                                                                                                              +350 ~ +700 [ns] @1147 MHz FERMI ^^^^^^^^
    |                                                                                                                          |                    ^^^^^^^^
    |                                                                                                                       +5 [ns] @ 200 MHz FPGA. . . . . . Xilinx/Zync Z7020/FPGA massive-parallel streamline-computing mode ev. PicoBlazer softCPU
    |                                                                                                                          |                    ^^^^^^^^
    |                                                                                                                   ~  +20 [ns] @1147 MHz FERMI ^^^^^^^^
    |                                                             SM-REGISTERs/thread: max  63 for CC-2.x -with only about +22 [GPU_CLKs] latency ( maskable by 22-WARPs ) to hide on [REGISTER DEPENDENCY] when arithmetic result is to be served from previous [INSTR] [G]:10.4, Page-46
    |                                                                                  max  63 for CC-3.0 -          about +11 [GPU_CLKs] latency ( maskable by 44-WARPs ) [B]:5.2.3, Page-73
    |                                                                                  max 128 for CC-1.x                                    PAR -- ||||||||~~~|
    |                                                                                  max 255 for CC-3.5                                    PAR -- ||||||||||||||||||~~~~~~|
    |
    |                                                       smREGs___BW                                 ANALYZE REAL USE-PATTERNs IN PTX-creation PHASE <<  -Xptxas -v          || nvcc -maxrregcount ( w|w/o spillover(s) )
    |                                                                with about 8.0  TB/s BW            [C:Pg.46]
    |                                                                           1.3  TB/s BW shaMEM___  4B * 32banks * 15 SMs * half 1.4GHz = 1.3 TB/s only on FERMI
    |                                                                           0.1  TB/s BW gloMEM___
    |         ________________________________________________________________________________________________________________________________________________________________________________________________________________________
    +========|   DEVICE:3 PERSISTENT                          gloMEM___
    |       _|______________________________________________________________________________________________________________________________________________________________________________________________________________________
    +======|   DEVICE:2 PERSISTENT                          gloMEM___
    |     _|______________________________________________________________________________________________________________________________________________________________________________________________________________________
    +====|   DEVICE:1 PERSISTENT                          gloMEM___
    |   _|______________________________________________________________________________________________________________________________________________________________________________________________________________________
    +==|   DEVICE:0 PERSISTENT                          gloMEM_____________________________________________________________________+440 [GPU_CLKs]_________________________________________________________________________|_GB|
    !  |                                                         |\                                                                +                                                                                           |
    o  |                                                texMEM___|_\___________________________________texMEM______________________+_______________________________________________________________________________________|_MB|
       |                                                         |\ \                                 |\                           +                                               |\                                          |
       |                                              texL2cache_| \ \                               .| \_ _ _ _ _ _ _ _texL2cache +370 [GPU_CLKs] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | \                                   256_KB|
       |                                                         |  \ \                               |  \                         +                                 |\            ^  \                                        |
       |                                                         |   \ \                              |   \                        +                                 | \           ^   \                                       |
       |                                                         |    \ \                             |    \                       +                                 |  \          ^    \                                      |
       |                                              texL1cache_|     \ \                           .|     \_ _ _ _ _ _texL1cache +260 [GPU_CLKs] _ _ _ _ _ _ _ _ _ |   \_ _ _ _ _^     \                                 5_KB|
       |                                                         |      \ \                           |      \                     +                         ^\      ^    \        ^\     \                                    |
       |                                     shaMEM + conL3cache_|       \ \                          |       \ _ _ _ _ conL3cache +220 [GPU_CLKs]           ^ \     ^     \       ^ \     \                              32_KB|
       |                                                         |        \ \                         |        \       ^\          +                         ^  \    ^      \      ^  \     \                                  |
       |                                                         |         \ \                        |         \      ^ \         +                         ^   \   ^       \     ^   \     \                                 |
       |                                   ______________________|__________\_\_______________________|__________\_____^__\________+__________________________________________\_________\_____\________________________________|
       |                  +220 [GPU-CLKs]_|           |_ _ _  ___|\          \ \_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ _ _ _ _\_ _ _ _+220 [GPU_CLKs] on re-use at some +50 GPU_CLKs _IF_ a FETCH from yet-in-shaL2cache
       | L2-on-re-use-only +80 [GPU-CLKs]_| 64 KB  L2_|_ _ _   __|\\          \ \_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ _ _ _ _\_ _ _ + 80 [GPU_CLKs] on re-use from L1-cached (HIT) _IF_ a FETCH from yet-in-shaL1cache
       | L1-on-re-use-only +40 [GPU-CLKs]_|  8 KB  L1_|_ _ _    _|\\\          \_\__________________________________\________\_____+ 40 [GPU_CLKs]_____________________________________________________________________________|
       | L1-on-re-use-only + 8 [GPU-CLKs]_|  2 KB  L1_|__________|\\\\__________\_\__________________________________\________\____+  8 [GPU_CLKs]_________________________________________________________conL1cache      2_KB|
       |     on-chip|smREG +22 [GPU-CLKs]_|           |t[0_______^:~~~~~~~~~~~~~~~~\:________]
       |CC-  MAX    |_|_|_|_|_|_|_|_|_|_|_|           |t[1_______^                  :________]
       |2.x   63    |_|_|_|_|_|_|_|_|_|_|_|           |t[2_______^                  :________] 
       |1.x  128    |_|_|_|_|_|_|_|_|_|_|_|           |t[3_______^                  :________]
       |3.5  255 REGISTERs|_|_|_|_|_|_|_|_|           |t[4_______^                  :________]
       |         per|_|_|_|_|_|_|_|_|_|_|_|           |t[5_______^                  :________]
       |         Thread_|_|_|_|_|_|_|_|_|_|           |t[6_______^                  :________]
       |            |_|_|_|_|_|_|_|_|_|_|_|           |t[7_______^     1stHalf-WARP :________]______________
       |            |_|_|_|_|_|_|_|_|_|_|_|           |t[ 8_______^:~~~~~~~~~~~~~~~~~:________]
       |            |_|_|_|_|_|_|_|_|_|_|_|           |t[ 9_______^                  :________]
       |            |_|_|_|_|_|_|_|_|_|_|_|           |t[ A_______^                  :________]
       |            |_|_|_|_|_|_|_|_|_|_|_|           |t[ B_______^                  :________]
       |            |_|_|_|_|_|_|_|_|_|_|_|           |t[ C_______^                  :________]
       |            |_|_|_|_|_|_|_|_|_|_|_|           |t[ D_______^                  :________]
       |            |_|_|_|_|_|_|_|_|_|_|_|           |t[ E_______^                  :________]
       |            |_|_|_|_|_|_|_|_|_|_|_|       W0..|t[ F_______^____________WARP__:________]_____________
       |            |_|_|_|_|_|_|_|_|_|_|_|         ..............             
       |            |_|_|_|_|_|_|_|_|_|_|_|           ............|t[0_______^:~~~~~~~~~~~~~~~\:________]
       |            |_|_|_|_|_|_|_|_|_|_|_|           ............|t[1_______^                 :________]
       |            |_|_|_|_|_|_|_|_|_|_|_|           ............|t[2_______^                 :________] 
       |            |_|_|_|_|_|_|_|_|_|_|_|           ............|t[3_______^                 :________]
       |            |_|_|_|_|_|_|_|_|_|_|_|           ............|t[4_______^                 :________]
       |            |_|_|_|_|_|_|_|_|_|_|_|           ............|t[5_______^                 :________]
       |            |_|_|_|_|_|_|_|_|_|_|_|           ............|t[6_______^                 :________]
       |            |_|_|_|_|_|_|_|_|_|_|_|           ............|t[7_______^    1stHalf-WARP :________]______________
       |            |_|_|_|_|_|_|_|_|_|_|_|           ............|t[ 8_______^:~~~~~~~~~~~~~~~~:________]
       |            |_|_|_|_|_|_|_|_|_|_|_|           ............|t[ 9_______^                 :________]
       |            |_|_|_|_|_|_|_|_|_|_|_|           ............|t[ A_______^                 :________]
       |            |_|_|_|_|_|_|_|_|_|_|_|           ............|t[ B_______^                 :________]
       |            |_|_|_|_|_|_|_|_|_|_|_|           ............|t[ C_______^                 :________]
       |            |_|_|_|_|_|_|_|_|_|_|_|           ............|t[ D_______^                 :________]
       |            |_|_|_|_|_|_|_|_|_|_|_|           ............|t[ E_______^                 :________]
       |            |_|_|_|_|_|_|_|_|_|_|_|       W1..............|t[ F_______^___________WARP__:________]_____________
       |            |_|_|_|_|_|_|_|_|_|_|_|         ....................................................
       |            |_|_|_|_|_|_|_|_|_|_|_|          ...................................................|t[0_______^:~~~~~~~~~~~~~~~\:________]
       |            |_|_|_|_|_|_|_|_|_|_|_|          ...................................................|t[1_______^                 :________]
       |            |_|_|_|_|_|_|_|_|_|_|_|          ...................................................|t[2_______^                 :________] 
       |            |_|_|_|_|_|_|_|_|_|_|_|          ...................................................|t[3_______^                 :________]
       |            |_|_|_|_|_|_|_|_|_|_|_|          ...................................................|t[4_______^                 :________]
       |            |_|_|_|_|_|_|_|_|_|_|_|          ...................................................|t[5_______^                 :________]
       |            |_|_|_|_|_|_|_|_|_|_|_|          ...................................................|t[6_______^                 :________]
       |            |_|_|_|_|_|_|_|_|_|_|_|          ...................................................|t[7_______^    1stHalf-WARP :________]______________
       |            |_|_|_|_|_|_|_|_|_|_|_|          ...................................................|t[ 8_______^:~~~~~~~~~~~~~~~~:________]
       |            |_|_|_|_|_|_|_|_|_|_|_|          ...................................................|t[ 9_______^                 :________]
       |            |_|_|_|_|_|_|_|_|_|_|_|          ...................................................|t[ A_______^                 :________]
       |            |_|_|_|_|_|_|_|_|_|_|_|          ...................................................|t[ B_______^                 :________]
       |            |_|_|_|_|_|_|_|_|_|_|_|          ...................................................|t[ C_______^                 :________]
       |            |_|_|_|_|_|_|_|_|_|_|_|          ...................................................|t[ D_______^                 :________]
       |            |_|_|_|_|_|_|_|_|_|_|_|          ...................................................|t[ E_______^                 :________]
       |            |_|_|_|_|_|_|_|_|_|_|_|tBlock Wn....................................................|t[ F_______^___________WARP__:________]_____________
       |
       |                   ________________          °°°°°°°°°°°°°°°°°°°°°°°°°°~~~~~~~~~~°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
       |                  /                \   CC-2.0|||||||||||||||||||||||||| ~masked  ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
       |                 /                  \  1.hW  ^|^|^|^|^|^|^|^|^|^|^|^|^| <wait>-s ^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|
       |                /                    \ 2.hW  |^|^|^|^|^|^|^|^|^|^|^|^|^          |^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^
       |_______________/                      \______I|I|I|I|I|I|I|I|I|I|I|I|I|~~~~~~~~~~I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|
       |~~~~~~~~~~~~~~/ SM:0.warpScheduler    /~~~~~~~I~I~I~I~I~I~I~I~I~I~I~I~I~~~~~~~~~~~I~I~I~I~I~I~I~I~I~I~I~I~I~I~I~I~I~I~I~I~I~I~I~I~I~I~I~I~I~I~I~I~I~I~I~I~I
       |              \          |           //
       |               \         RR-mode    //
       |                \    GREEDY-mode   //
       |                 \________________//
       |                   \______________/SM:0__________________________________________________________________________________
       |                                  |           |t[ F_______^___________WARP__:________]_______
       |                                ..|SM:1__________________________________________________________________________________
       |                                  |           |t[ F_______^___________WARP__:________]_______
       |                                ..|SM:2__________________________________________________________________________________
       |                                  |           |t[ F_______^___________WARP__:________]_______
       |                                ..|SM:3__________________________________________________________________________________
       |                                  |           |t[ F_______^___________WARP__:________]_______
       |                                ..|SM:4__________________________________________________________________________________
       |                                  |           |t[ F_______^___________WARP__:________]_______
       |                                ..|SM:5__________________________________________________________________________________
       |                                  |           |t[ F_______^___________WARP__:________]_______
       |                                ..|SM:6__________________________________________________________________________________
       |                                  |           |t[ F_______^___________WARP__:________]_______
       |                                ..|SM:7__________________________________________________________________________________
       |                                  |           |t[ F_______^___________WARP__:________]_______
       |                                ..|SM:8__________________________________________________________________________________
       |                                  |           |t[ F_______^___________WARP__:________]_______
       |                                ..|SM:9__________________________________________________________________________________
       |                                ..|SM:A      |t[ F_______^___________WARP__:________]_______
       |                                ..|SM:B      |t[ F_______^___________WARP__:________]_______
       |                                ..|SM:C      |t[ F_______^___________WARP__:________]_______
       |                                ..|SM:D      |t[ F_______^___________WARP__:________]_______
       |                                  |_______________________________________________________________________________________
       */

Điểm mấu chốt?

Bất kỳ thiết kế có động cơ có độ trễ thấp nào cũng phải thiết kế ngược lại "I / O-thủy lực" (vì 0 1-XAX không thể tự điều chỉnh được) và độ trễ kết quả điều chỉnh đường bao hiệu suất cho bất kỳ giải pháp GPGPU nào vì nó được tính toán chuyên sâu ( đọc : trong đó chi phí xử lý sẽ tha thứ nhiều hơn một chút độ trễ XAXs ...) hoặc không ( đọc : trong đó (có thể gây ngạc nhiên cho ai đó) CPU nhanh hơn trong xử lý từ đầu đến cuối, so với các loại vải GPU [trích dẫn có sẵn] ).


7
Tôi đã cố gắng để hiểu câu trả lời của bạn. Có vẻ rất thú vị nhưng đồ thị ASCII không dễ đọc vì giới hạn chiều cao / chiều rộng. Xin lỗi tôi không biết làm thế nào để cải thiện điều này ... Cuối cùng tôi đang thiếu một bản tóm tắt (cuối cùng, tôi không biết phải nghĩ gì về CPU so với độ trễ của GPU). Hy vọng bạn có thể cải thiện câu trả lời của bạn để cung cấp một cái nhìn tốt hơn và dễ hiểu hơn về con người. Lòng can đảm. Chúc mừng :-D
olibre

3

Nhìn vào cốt truyện "cầu thang" này, minh họa hoàn hảo các thời gian truy cập khác nhau (về mặt hình ảnh đồng hồ). Lưu ý CPU màu đỏ có thêm một "bước", có thể là do nó có L4 (trong khi các CPU khác thì không).

Đồ thị thời gian truy cập với phân cấp bộ nhớ khác nhau

Lấy từ bài viết này.

Trong khoa học máy tính, điều này được gọi là "Độ phức tạp I / O".

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.