0

Я искал разницу между привязанными к ЦП и программами, привязанными к IO. Именно тогда я столкнулся с answers, объяснив, что существуют другие варианты, такие как привязка к памяти, привязка к кешу и т. Д.Цементирование связано с привязкой к кешу - могут ли выполняться инструкции без доступа к кеш-памяти? Может ли доступ к памяти быть таким же быстрым, как выполнение команды?

Я понимаю, как привязка памяти (умножение двух больших матриц в основной памяти) и IO Bound (grep) отличаются от друг с другом и с привязкой к границам CPU/Cache.

Однако разница между программами с привязкой к ЦП и программами IO Bound выглядит нечетко. Вот что я собрал:

Кэш-привязка - скорость доступа к кешу является важным фактором в определении скорости, с которой программа запускается. Например, если наиболее посещаемая часть программы представляет собой небольшой фрагмент кода внутри цикла, достаточно мала, чтобы содержаться в кеше, тогда программа может быть связана с кешем.

CPU bound - скорость, с которой процессор выполняет инструкции, является важным фактором при определении скорости выполнения программы.

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

Так что же ЦП связано с кешем?

+0

* инструкции должны быть выбраны до исполнения (из кэша/основной памяти) *. Почти все процессоры используют разбитый L1-кеш, поэтому команда-выборка не конкурирует с загрузкой/хранением данных (среди других причин). Когда код горячий в кеше L1, сам кеш не является узким местом. Узкие места для извлечения/декодирования называются узкими местами «переднего плана». –

+2

Кроме того, даже не верно, что инструкции должны извлекаться из I-кеша L1 при каждом запуске: процессоры Intel SnB-семейства имеют кэш декодированного -уопа, а также буфер цикла, поэтому они могут запускать от средних до небольших циклов без повторное декодирование инструкций. –

+1

Я не слышал о терминах, связанных с кешем, но я предполагаю, что это означает, что рабочий набор подходит для кеша L2 или L3, но не для кеша L1. Таким образом, узкие места кода в полосе пропускания и/или латентности для большего и более медленного кеша, чем L1D. Узкие места в кеш-керах, вероятно, будут конкретно упомянуты, потому что это относительно необычно. –

ответ

3

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

Основная память, например, зависит от количества каналов и типа DRAM (и, конечно, частоты), но предположим, что он обычно достигает 25 Гбит/с в клиентских ЦП. это означает, что любая рабочая нагрузка, которая пытается потреблять данные за пределами этой скорости, будет блокироваться памятью BW (т. е. границей памяти), а остальные системы будут недостаточно использоваться.

Кэш BW зависит от уровня кэша (и микроархитектуры процессора и, конечно, от частоты этого домена кэша), но вы можете узнать, где он находится в руководствах по оптимизации.

В соответствии с 2.1.3 here, Intel Skylake, например, обеспечивает 2 32B нагрузки + 1 магазин за цикл от L1 (хотя фактическое использование, которое они цитируют, немного ниже, вероятно, из-за столкновений или помех обратной записи), L2 - эффективно около 1/2 линии за цикл, а L3 - чуть меньше 1/3. Это означает, что если ваш набор данных содержится на одном из этих уровней, вы можете достичь этого пика BW до того, как его будет закрывать этот кеш.

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

Есть полезные инструменты, чтобы определить, что вы ограничены - искать TopDown analysis, например

+0

Я думал, что фактическая причина, по которой HSL/BDW/SKL поддерживает пропускную способность L1, указанную руководством по оптимизации Intel (~ 83B/c IIRC) ниже пика (96B/цикл), является несовершенным составлением графика. Каждый раз, когда адрес памяти uop запланирован на p23 вместо p7, он не позволяет порту выполнять загрузку. –

+0

Нет, я добавил, что они добавили специальный порт для STA, см. Схему портов здесь - http://wccftech.com/idf-2013-intel-details-haswell-microarchitecture-overclocking-features-4th-generation-hd-graphics -core /, даже заявлено, что намерение состоит в том, чтобы уменьшить конфликт с нагрузками. – Leeor

+0

Правильно, это порт 7. Он может обрабатывать только простые режимы адресации (неиндексированный IIRC, но не цитируйте меня на этом). Хранилище-адрес uops все еще может быть выделен для портов 2 и 3. Это действительно на практике даже для простых режимов адресации, которые могли бы выполняться на порте 7. uop -> распределение портов происходит в разное время на основе счетчиков, которые дают эвристическое изображение конкуренции за каждый порт. По-видимому, логика не имеет особого случая port7 и вынуждает STA использовать ее, когда это возможно. –

 Смежные вопросы

  • Нет связанных вопросов^_^