Çeşitli önbelleklere ve ana belleğe erişmek için yaklaşık maliyet?


178

Herkes bana L1, L2 ve L3 önbelleklerine ve ayrıca Intel i7 işlemcilerdeki ana belleğe erişmek için yaklaşık süreyi (nanosaniye cinsinden) verebilir mi?

Bu özel olarak bir programlama sorusu olmasa da, bu tür hız ayrıntılarını bilmek bazı düşük gecikmeli programlama zorlukları için gereklidir.



1
Ns'yi döngülere nasıl dönüştürebilirim? 100 ns'yi 2.3 GHz'e bölersem, 230 döngü elde ederim. Bu doğru mu?
Nathan

5
Merak ediyorum: Hangi koşulda uzak L3 önbelleği uzak DRAM'den daha yavaş? Yukarıdaki sayı, 1.6 kat kadar yavaş olabileceğini göstermektedir.
netvope

1
Lütfen soruyu düzenlemeyin, bunun yerine bu ayrıntılarla bir yanıt gönderin. Kendi kendine cevaplama SO üzerinde tamam.
Stijn de Witt

Her seviyeden bellek erişimi için yaklaşık enerji tüketimi değerleri var mı?
kanna

Yanıtlar:


74

İşte i7 ve Xeon işlemci çeşitleri için bir Performans Analizi Kılavuzu . Vurgulamalıyım, ihtiyacınız olan şey ve daha fazlası var (örneğin, bazı zamanlamalar ve döngüler için sayfa 22'yi kontrol edin).

Ayrıca, bu sayfada saat döngüleri vb. İle ilgili bazı ayrıntılar bulunur. İkinci bağlantı aşağıdaki sayıları sundu:

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:
En önemlisi, belirtilen masanın altındaki uyarıdır ve şunları söyler:

"NOT: BU DEĞERLER kabaca verilmiştir. ONLAR AÇIK CORE VE Uncore FREKANSLAR, BELLEK hızlar BIOS AYARLARI, DIMM SAYISI DEPEND VB, VB .. kilometre değişebilir. "

DÜZENLEME: Zamanlama / döngü bilgilerinin yanı sıra yukarıdaki intel belgesinin i7 ve Xeon işlemci serilerinin (performans açısından) çok daha fazla (son derece) yararlı ayrıntılara hitap ettiğini vurgulamalıyım.


1
'Paylaşılmamış satır', 'başka bir çekirdekteki paylaşılan satırdan' daha fazla gecikmeye sahip olmamalıdır - paylaşılan bir satır (yani 2 çekirdek geçerli bit), temiz olması garanti edildiği için doğrudan LLC diliminden alınabileceği anlamına gelir. 'Hat paylaşılmadı', yalnızca bir çekirdek geçerli bitin olduğu ve çizginin özel olmasını ve değiştirilmemesini sağlamak için çekirdeğin açılması gerektiği anlamına gelir - eğer değiştirilirse paylaşılırsa değiştirilir; LLC artık kirleniyor ve paylaşılan olarak istekte bulunan çekirdeğe geri dönüyor. Belki yanılıyorum - MOESI protokolünün farklı olduğunu biliyorum.
Lewis Kelsey

1
Kesinlikle bu SnB ve Haswell'de geçerlidir. Bu Xeon'un kullandığı Nehalem, halka veri yolu topolojisinden önceydi ve birleşik bir önbelleğe sahipti, ancak snoop filtresinin Nehalem'de neden farklı davranacağını anlamıyorum. Optimizasyon kılavuzu bölümü B.3.5.3, yanlış bir açıklama olduğunu düşündüğüm şeyi veriyor (Nehalem özelliği olan Global Queue hakkında konuşurken açıkça Nehalem ile ilgilidir). Bu Haswell makalesinin daha iyi bir açıklaması var (sayfa 5'in sağ üst sütunu) ( tu-dresden.de/zih/forschung/ressourcen/dateien/… )
Lewis Kelsey

@LewisKelsey: Bu benim için de şaşırtıcı, çünkü L3'ü dahil etme noktasının yarısının, L3'ün bir satırın geçerli bir kopyası olsaydı yanıt verebileceğiydi diye düşündüm. Ancak unutmayın, Intel NUMA için MESIF ( en.wikipedia.org/wiki/MESIF_protocol ), AMD MOESI kullanır. Bence tek bir yuvada, MESIF gerçekten bir şey değil çünkü veriler çekirdek çekirdekten değil L3'ten geliyor. Bu yüzden muhtemelen soketlerden L3 önbellek-> önbellek aktarımları için daha önemlidir. Acaba bu "yerel L3 hit" başka bir soket çekirdek ile paylaşılan bir hat için mi? Hala mantıklı değil, L3'te geçerli hiçbir çekirdeğin E / M olmadığı anlamına geliyor
Peter Cordes

@PeterCordes Bu yorumu hatırladım ve geri döndüm ve söylediklerim hemen bana yanlış geldi. Benim yorumum, diğer iki çekirdek arasında paylaşıldığı veya sadece bir çekirdeğe özel olarak konumlandırıldığı bir 3. çekirdek perspektifinde doğrudur. Ancak paylaşılmamış hattan bahsediyorsanız ve hatta erişmeye çalışan çekirdeğe aitse, kıyaslama doğrudur, çünkü paylaşılan, özel ve özel bir araç elde etmek için bir RFO gerektirir. Bu yüzden gerçekten ne dediğimi bilmiyorum.
Lewis Kelsey

@LewisKelsey: Evet, hepsi yazmak için doğru. Bunun okuma için olduğunu düşündüm (Veri Kaynağı Gecikmesi), bu da daha fazla gecikmeye duyarlı. Bir satırı okumak asla bir RFO gerektirmez, sadece bir paylaşım isteği. Öyleyse, zaten bir yerde Paylaşılan durumda olan bir satır, tutarlılık trafiğini beklemek zorunda kalmadan bu soketin L3'üne çarpmamalı mı? Ve böylece "paylaşılmamış" L3 vuruşuna benzer şekilde DRAM'den daha hızlı olun.
Peter Cordes

189

Herkesin bilmesi gereken sayılar

           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|

Gönderen: Başlangıçta Peter Norvig tarafından:
- http://norvig.com/21-days.html#answers
- http://surana.wordpress.com/2009/01/01/numbers-everyone-should-know/ ,
- http://sites.google.com/site/io/building-scalable-web-applications-with-google-app-engine

görsel bir karşılaştırma


11
Elbette bu tasarım çok büyük miktarlarda, işlemci tasarımı, ram gecikmesi / frekansı, sabit disk önbellekleme (hem tip hem de boyut) / rpm vb. INTEL (belirli bir CPU için piyasaya sürdükleri değerler için): "NOT: Bu değerler kabaca yaklaşık değerlerdir. Çekirdek ve Uncore Frekanslarına, Bellek hızlarına, BIOS ayarlarına, DIMMS Sayısına vb. Bağlıdır. . "
Dave

28
Bu doğru, ancak bu sayılar büyüklük sırasını gösteriyor
Andrey

8
@Dave, cpu'nun türü / hızı / mimarisi farklı olsa da, göreceli zamanlamanın kabaca aynı kalması gerektiğine inanıyorum, bu yüzden kod yazarken bilmek sadece kaba bir kılavuzdur. Daha anlamlı analiz elbette profiler aracılığıyla yapılmalıdır ...
xosp7tom

8
Ne kadar zaman olduğuna dair bir fikre sahip olmak için Wikipedia, "Bir nanosaniye bir saniyedir, bir saniye 31,7 yıldır." en.wikipedia.org/wiki/Nanosecond
Sadece Siz

2
Önbellek özledim varsa @kernel, daha düşük düzey önbelleğe veya hatta ana belleğe erişim gerektireceği anlamına gelir. Bu durumda, bu düzey erişim süresine göre zaman alacaktır. Daha yeni CPU'lara ilişkin verileri burada bulabilirsiniz sisoftware.net/?d=qa&f=ben_mem_latency
Andrey

39

Güzel bir sayfada çeşitli anılara erişim maliyeti

özet

  1. Değerler azaldı ancak 2005'ten beri dengelendi

            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. Hala bazı gelişmeler, 2020 için tahmin

       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)
    

Ayrıca diğer kaynaklara bakın

Ayrıca bakınız

Daha iyi anlamak için, ben mükemmel tavsiye Modern önbellek mimarileri sunumunu dan (Haziran 2014) Gerhard Wellein , Hannes Hofmann ve Dietmar Fey de Üniversite Erlangen-Nürnberg .

Fransızca konuşan insanlar, SpaceFox'un bir işlemciyi, geliştiriciyle , çalışmaya devam etmek için gereken bilgileri bekleyen bir geliştirici ile karşılaştırarak takdir edebilirler .


güzel bir gecikme yazısı. GPU-gecikme maskeleme gerçekliği hakkında gerçekleri eklemek iyi olurdu (
user3666197

Merhaba @ user3666197 GPU ile ilgili bellek gecikmesi hakkında bazı kaynaklarınız var mı? Şerefe :-)
olibre

Kesinlikle, evet, @olibre. [A]Aşağıdaki gönderileri kontrol edin .
user3666197

1
Bunun gecikme ve önbelleğe alma ile ilgili olduğu göz önüne alındığında, ilk kaydırmanızdaki sayfanın yıl kaydırıcısıyla yılı değiştirirken metrik ekranı önbelleğe almamasının ironik olduğunu düşünüyorum. Firefox'ta, en azından yıllar boyunca sürüklemek için çok yavaş
işliyorlar

1
Güzel referanslar, başlıklar ve yazarlar verdiniz!
SamB

22

Sadece 2020'nin 2025 için tahminleri gözden geçirmesi uğruna:

Entegre devre teknolojisinin son 44 yılı olan klasik (kuantum olmayan) işlemciler, tam anlamıyla ve fiziksel olarak "Per Aspera ad Astra" olarak gelişti . Son on yıl kanıtlanmıştır, klasik süreç, ileride ulaşılabilir bir fiziksel yola sahip olmayan bazı engellere yaklaşmıştır.

Number of logical coresbüyüyebilir ve büyüyebilir, ancak fizik temelli tavanı atlatmak imkansız değilse bile daha fazla değil, zaten vurulabilir ve büyüyebilir, ancak daha az (güç, gürültü, "saat") büyüyebilir, ancak güç dağıtımı ve ısı dağılımı ile ilgili sorunlar genişleyebilir önbellek ayak izleri doğrudan faydaları ve daha az sıklıkta sistem zorlama bağlam anahtarlama daha hızlı ve daha geniş bellek-I / O & dolaylı yararları artarak artabilir diğer konuları / süreçleri arasında bölmek için daha fazla çekirdek olabilirO(n^2~3)
Frequency [MHz]
Transistor CountO(n^2~3)
Power [W]
Single Thread Perf

Krediler Leonardo Suriano ve Karl Rupp'a gidiyor
(Krediler Leonardo Suriano ve Karl Rupp'a gidiyor)

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|

Sadece 2015'in 2020 tahminlerini gözden geçirmek uğruna:

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

Sadece CPU ve GPU gecikme süresi karşılaştırması için:

DRAM hızının gecikme süresini ve yüklü gecikmeyi (doygun sistem) belirlediği bir faktör olduğu en basit CPU / önbellek / DRAM dizilerini (tek tip bir bellek erişim modelinde bile) karşılaştırmak kolay bir iş değildir. kurumsal uygulamaların boşta tamamen boşaltılmış bir sistemden daha fazlasını deneyimleyeceği bir şey.

                    +----------------------------------- 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

Düzgün Bellek Erişimi

GPU motorları çok sayıda teknik pazarlama aldı, ancak derin iç bağımlılıklar bu mimarilerin uygulamada yaşadığı gerçek güçlü yanları ve gerçek zayıflıkları anlamanın anahtarıdır (genellikle agresif pazarlama ıslık beklentilerinden çok farklı).

   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
 - - - - -

Bu nedenle içsellikleri anlamak, mimarilerin yayınlandığı ve sayısız ölçütün serbestçe bulunduğu diğer alanlardan çok daha önemlidir. Kara kutu yaklaşımı içindeki gerçek çalışma şemalarının gerçekliğini ortaya çıkarmak için zamanını ve yaratıcılığını harcayan GPU-mikro-test cihazları sayesinde çok teşekkürler.

    +====================| + 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|

"Daha büyük bir resim" için özür dilerim , ancak gecikme-demasking'in çip üzerinde smREG / L1 / L2 kapasitelerinden ve isabet / kaçırılma oranlarından kaynaklanan kardinal sınırları da var.

    |.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__:________]_______
       |                                  |_______________________________________________________________________________________
       */

Alt çizgi?

Düşük gecikmeli motive edilmiş tasarım "I / O-hidroliği" yerine tersine mühendislik yapmak zorundadır (0 1-XFER'ler doğa tarafından sıkıştırılamaz) ve sonuçta ortaya çıkan gecikmeler, hesaplama açısından yoğun (GPGPU çözümü için performans zarfını yönetir ( okunur) : işlem maliyetlerinin biraz daha düşük bir gecikme süresi XFER'lerini affettiği durumlarda) veya değil ( okundu : nerede (birinin şaşırtması olabilir) CPU'lar uçtan uca işlemede GPU kumaşlarından daha hızlıdır [alıntılar mevcut] ).


7
Cevabınızı anlamaya çalıştım. Çok ilginç görünüyor, ancak yüksek / genişlik sınırlamaları nedeniyle ASCII grafiklerinin okunması kolay değil. Üzgünüm bunun nasıl geliştirilebileceğini bilmiyorum ... Sonunda bir özet eksik (sonunda, CPU vs GPU gecikmeleri hakkında ne düşüneceğimi bilmiyorum). Umarım daha iyi bir göz-şeker görünümü ve insan anlaşılırlığı sağlamak için cevabınızı geliştirebilirsiniz. Cesaret. Şerefe :-D
olibre

3

Farklı erişim sürelerini (saat tikleri açısından) mükemmel şekilde gösteren bu "merdiven" grafiğine bakın. Kırmızı CPU'nun, muhtemelen L4'e sahip olduğu için (başkaları yokken) ek bir "adım" a dikkat edin.

Farklı bellek hiyerarşilerine sahip erişim sürelerinin grafikleri

Bu Extremetech makalesinden alınmıştır.

Bilgisayar biliminde buna "G / Ç karmaşıklığı" denir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.