Примерная стоимость доступа к различным кешам и оперативной памяти?

Может ли кто-нибудь дать мне приблизительное время (в наносекундах) для доступа к кешам L1, L2 и L3, а также к основной памяти на процессорах Intel i7?

Хотя это не совсем вопрос программирования, знание таких деталей скорости необходимо для некоторых задач программирования с малой задержкой.


person Ted Graham    schedule 03.11.2010    source источник
comment
Mechanical-sympathy.blogspot.com/2013/02/   -  person Beachhouse    schedule 17.05.2013
comment
Как преобразовать нс в циклы? Если просто разделить 100 нс на 2,3 ГГц, получится 230 циклов. Это верно?   -  person Nathan    schedule 17.12.2014
comment
Мне любопытно: в какой ситуации удаленный кэш L3 медленнее, чем удаленная DRAM? Число выше означает, что он может быть в 1,6 раза медленнее.   -  person netvope    schedule 13.12.2015
comment
Пожалуйста, не редактируйте вопрос, а вместо этого опубликуйте ответ с этими деталями. Самоответчик нормально работает на SO.   -  person Stijn de Witt    schedule 22.09.2017
comment
Есть ли приблизительные значения энергопотребления для доступа к памяти с каждого уровня?   -  person kanna    schedule 30.11.2018
comment
@ Натан, умножь на 2.3 cyc/1 ns (потому что 1 s = 10^9 ns, 1 Hz = 1 / 1 s и G = 10^9).   -  person maxschlepzig    schedule 11.10.2019


Ответы (5)


Это руководство по анализу производительности для i7 и Xeon. ассортимент процессоров. Я должен подчеркнуть, что здесь есть то, что вам нужно, и многое другое (например, посмотрите страницу 22, чтобы узнать о некоторых временных параметрах и циклах).

Кроме того, на этой странице есть некоторые сведения о тактах и ​​т. Д. Вторая ссылка обслуживала следующие номера:

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:
Наиболее важным является примечание под указанной таблицей, в котором говорится:

"ПРИМЕЧАНИЕ. ЭТИ ЗНАЧЕНИЯ ПРИБЛИЖАЮТСЯ. ОНИ ЗАВИСЯТ ОТ ЧАСТОТЫ ЯДРА И НЕОБРАБОТАННЫХ ЧАСТОТ, СКОРОСТИ ПАМЯТИ, НАСТРОЕК BIOS, КОЛИЧЕСТВА ДИММОВ, И Т.Д. И Т.Д .. ВАШ ПРОБЕГ МОЖЕТ РАЗЛИЧАТЬСЯ. "

РЕДАКТИРОВАТЬ: Я должен подчеркнуть, что, помимо информации о времени / цикле, вышеупомянутый документ Intel описывает гораздо больше (чрезвычайно) полезных деталей диапазона процессоров i7 и Xeon (с точки зрения производительности).

person Dave    schedule 03.11.2010
comment
Не следует, чтобы «линия без общего доступа» имела большую задержку, чем «общая линия в другом ядре» - общая линия (т. Е. 2 ​​действительных бита ядра) означает, что ее можно взять непосредственно из среза LLC, поскольку она гарантированно будет чистой. «Line unshared» означает, что имеется только один действительный бит ядра, и что ядро ​​должно быть отслежено, чтобы гарантировать, что строка является эксклюзивной и не измененной - если она изменена, то она будет изменена на разделяемую; LLC теперь становится грязной и возвращается запрашивающему ядру как совместно используемая. Может я ошибаюсь - я знаю, что протокол MOESI другой. - person Lewis Kelsey; 05.02.2019
comment
Конечно, это относится к SnB и Haswell. Nehalem, который использует этот Xeon, был до топологии кольцевой шины и имел унифицированный кеш, но я не понимаю, почему фильтр отслеживания ведет себя иначе в Nehalem. Раздел руководства по оптимизации B.3.5.3 дает то, что я считаю неправильным описанием (это явно относится к Nehalem, поскольку в нем говорится о глобальной очереди, которая является функцией Nehalem). Эта статья Haswell имеет лучшее описание (верхний правый столбец на странице 5) (tu-dresden.de/zih/forschung/ressourcen/dateien/) - person Lewis Kelsey; 06.02.2019
comment
@LewisKelsey: Меня это тоже удивляет, потому что я думал, что половина смысла инклюзивного L3 состоит в том, что L3 может просто ответить, если у него есть действительная копия строки. Но помните, что Intel использует MESIF (en.wikipedia.org/wiki/MESIF_protocol) для NUMA, AMD использует MOESI. Я думаю, что в рамках одного сокета MESIF на самом деле не является чем-то особенным, потому что данные поступают из L3, а не ядра ›ядра. Так что это, вероятно, более актуально для передачи кэша L3 через сокеты. Интересно, это локальное попадание L3 для линии, совместно используемой с ядром в другом сокете? По-прежнему не имеет смысла, действительно в L3 означает, что ядро ​​не имеет E / M - person Peter Cordes; 21.02.2019
comment
@PeterCordes Я вспомнил этот комментарий и вернулся, и то, что я сказал, сразу показалось мне неправильным. Мой комментарий верен с точки зрения третьего ядра, где он разделяется между двумя другими ядрами или просто эксклюзивен для одного другого ядра. Но если вы говорите о линии, не имеющей общего доступа, и она принадлежит ядру, которое пытается получить доступ к линии, тогда эталонный тест верен, потому что для совместного использования требуется RFO, чтобы получить его эксклюзивный, а эксклюзивный означает, что такого RFO не требуется. Так что на самом деле я не знаю, что я имел в виду. - person Lewis Kelsey; 24.05.2019
comment
@LewisKelsey: Да, это правда для письма. Я думал, что это было для чтения (Data Source Latency), которое более чувствительно к задержке. Для чтения строки никогда не требуется RFO, просто просьба поделиться. Так не следует ли строке, которая где-то уже находится в общем состоянии, просто попасть в L3 этого сокета, не дожидаясь согласованного трафика? И, таким образом, быть быстрее, чем DRAM, подобно удару L3 без совместного использования. - person Peter Cordes; 24.05.2019

Цифры, которые должен знать каждый

           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|

От: Первоначально автор Питер Норвиг:
- 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

визуальное сравнение

person Andrey    schedule 03.11.2010
comment
Конечно, это очень ОГРОМНЫЕ суммы, основанные на конструкции процессора, задержке / частоте оперативной памяти, кэшировании жесткого диска (как тип, так и размер) / об / мин и т. Д.? Цитировать INTEL (для значений, которые они выпустили для одного конкретного процессора): ПРИМЕЧАНИЕ. Эти значения являются приблизительными. Они зависят от частоты ядра и ядра, скорости памяти, настроек BIOS, количества модулей DIMM и т. Д. ВАШ ПРОБЕГ МОЖЕТ РАЗЛИЧАТЬСЯ ... - person Dave; 03.11.2010
comment
@ Дэйв, это правда, но эти цифры показывают порядок величины - person Andrey; 03.11.2010
comment
@Dave, даже несмотря на то, что тип / скорость / архитектура процессора отличается, я считаю, что относительное время должно примерно оставаться таким же, так что это просто приблизительное руководство, чтобы знать, когда вы кодируете. Разумеется, более содержательный анализ следует проводить с помощью профилировщика ... - person xosp7tom; 04.01.2012
comment
Чтобы иметь представление о том, сколько это времени, Википедия упоминает, что одна наносекунда соответствует одной секунде, а одна секунда - 31,7 годам. en.wikipedia.org/wiki/Nanosecond - person Only You; 24.11.2013
comment
Прошло некоторое время: я думаю, всегда ли эти цифры верны. Для меня это зависит от предварительных условий, скажем, вы выполняете одну и ту же инструкцию 10 тысяч раз. Скорость обращения к кешу L1 значительно увеличится, поскольку процессор является конвейером, и более ранние вычисления уже получили соответствующую информацию (например, обращение к L1). Я спрашиваю: время, необходимое для вычисления одной инструкции, требует дополнительных затрат. Но накладные расходы остаются прежними при многократном выполнении инструкции. Это верно? - person kernel; 22.04.2014
comment
@kernel Скорость обращения к L1 или любому другому кешу не зависит от предварительных условий. Предварительные условия могут повлиять на то, имеет место ссылка или нет. - person Andrey; 22.04.2014
comment
Вы имеете в виду штраф за пропуск кеширования? Значит, приведенные выше цифры по-прежнему надежны, даже с текущими архитектурами процессоров? - person kernel; 23.04.2014
comment
@kernel, если есть пропуск кеша, это означает, что ему потребуется доступ к кешу нижнего уровня или даже к основной памяти. В этом случае потребуется время, соответствующее времени доступа к этому уровню. Вы можете найти данные для новых процессоров здесь sisoftware.net/?d=qa&f=ben_mem_latency - person Andrey; 23.04.2014
comment
Как числа основной памяти соотносятся с задержкой CAS RAM? - person soham; 28.09.2020

Стоимость доступа к различным воспоминаниям на красивой странице

Резюме

  1. Значения снизились, но стабилизируются с 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. Еще некоторые улучшения, прогноз на 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)
    

См. Также другие источники

Смотрите также

Для дальнейшего понимания я рекомендую отличную презентацию современных архитектур кеш-памяти (июнь 2014 г.) из Герхард Веллейн, Ханнес Хофманн и Дитмар Фей на University_of_Erlangen-Nürnberg.

Франкоязычные люди могут оценить статью SpaceFox, сравнивающую процессор с разработчиком оба ждут для получения информации, необходимой для продолжения работы.

person oHo    schedule 06.01.2015
comment
прекрасный пост задержки. было бы хорошо добавить факты о реальности маскировки задержки GPU ( - person user3666197; 11.10.2015
comment
Привет @ user3666197 У вас есть источники о задержках памяти, связанных с графическим процессором? Ваше здоровье :-) - person oHo; 13.10.2015
comment
Конечно, да, @olibre. Проверьте [A], опубликованный ниже. - person user3666197; 13.10.2015
comment
Учитывая, как это связано с задержкой и кешированием, я нахожу ироничным, что страница по вашей первой ссылке с ползунком года не кэширует отображение метрики при изменении года. В Firefox, по крайней мере, они отображаются слишком медленно, чтобы перетаскивание по годам было плавным: / - person John Glassmyer; 13.12.2016
comment
Хорошие ссылки, вы дали названия и авторов! - person SamB; 14.12.2018

Просто ради обзора прогнозов на 2025 год на 2020 год:

За последние 44 года развития технологии интегральных схем классические (неквантовые) процессоры эволюционировали, буквально и физически «Per Aspera ad Astra». Последнее десятилетие показало, что классический процесс вплотную подошел к некоторым препятствиям, которые не имеют достижимого физического пути вперед.

Number of logical cores может и может расти, но не более чем O(n^2~3)
Frequency [MHz] трудно, если вообще возможно, обойти физический потолок, уже достигнутый < br> Transistor Count может и может расти, но меньше O(n^2~3) (мощность, шум, "часы")
Power [W] может расти, но все же проблемы с распределением питания и рассеиванием тепла будут увеличиваться
Single Thread Perf могут расти, имея прямую выгоду от большого объема кеш-памяти и более быстрого и широкого ввода-вывода памяти и косвенных преимуществ от менее частого принудительного контекста системы. переключение, поскольку у нас может быть больше ядер для разделения других потоков / процессов между

«Кредиты
(Кредиты принадлежат Леонардо Суриано и Карлу Руппу)

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|

Просто ради обзора прогнозов на 2020 год за 2015 год:

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

Просто для сравнения ландшафта задержки процессора и графического процессора:

Непростая задача сравнить даже простейшие линейки ЦП / кеш / DRAM (даже в унифицированной модели доступа к памяти), где скорость DRAM является фактором определения задержки, и задержка загрузки (насыщенная система), где последнее правило и является то, что корпоративные приложения испытают больше, чем простаивающая полностью разгруженная система.

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

«Унифицированный

GPU-движки получили много технического маркетинга, в то время как глубокие внутренние зависимости являются ключом к пониманию как реальных сильных сторон, так и реальных недостатков, с которыми эти архитектуры сталкиваются на практике (обычно это сильно отличается от агрессивных маркетинговых ожиданий).

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

Таким образом, понимание внутренних особенностей гораздо важнее, чем в других областях, где архитектуры публикуются, а многочисленные тесты доступны в свободном доступе. Большое спасибо GPU-микротестировщикам, которые потратили свое время и творческий потенциал, чтобы раскрыть правду о реальных схемах работы внутри тестируемых устройств на 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|

Приношу свои извинения за «большую картину», но демаскирование задержки также имеет кардинальные ограничения, накладываемые на емкость smREG / L1 / L2 на кристалле и частоту попаданий / пропусков.

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

Суть?

Любой проект, основанный на низкой задержке, должен скорее перепроектировать «гидравлику ввода-вывода» (поскольку 0 1-XFER по своей природе несжимаемы), и возникающие в результате задержки определяют диапазон производительности для любого решения GPGPU, даже если оно требует больших вычислительных ресурсов (< em> читать: где затраты на обработку немного больше прощают XFER с низкой задержкой ...) или нет (читать: где (может быть, к чьему-то удивлению) ЦП быстрее в сквозная обработка, чем у фабрик GPU [цитаты доступны]).

person user3666197    schedule 11.10.2015
comment
Я попытался понять ваш ответ. Это кажется очень интересным, но ASCII-графики нелегко читать из-за ограничений по ширине и ширине. Извините, я не знаю, как это можно улучшить ... Наконец, мне не хватает резюме (в конце я не знаю, что думать о задержках CPU и GPU). Надеюсь, вы сможете улучшить свой ответ, чтобы сделать его более привлекательным и понятным для людей. Храбрость. Приветствия :-D - person oHo; 13.10.2015

Взгляните на этот «лестничный» график, прекрасно иллюстрирующий разное время доступа (с точки зрения тиков часов). Обратите внимание на красный ЦП, имеющий дополнительную «ступеньку», вероятно, потому, что у него есть L4 (в то время как у других нет).

Графики времени доступа с разными иерархиями памяти

Взято из статьи Extremetech.

В информатике это называется «сложностью ввода-вывода».

person Oskar Person    schedule 01.04.2018