2014-01-23 3 views
1

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

ответ

3

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

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

Однако в этом одиночном ядре с гиперпотоком имеется только один FPU, один ALU, один блок управления, один интерфейс памяти и т. Д. Из-за этого ограничения истинное одновременное выполнение потоков требует дублирования этих компонентов. Дублирование ядра и определение интерфейса между ними намного проще, чем дизайн, который предполагает попытку сбалансировать несколько ALU или FPU с несколькими потоками в одном ядре.

+3

Собственно, это довольно неточно. Если вы посмотрите на [Hyperthreading] (http://en.wikipedia.org/wiki/Hyper-threading), вы увидите, что они на самом деле дублируют регистры и счетчики программ для каждого потока. Многопоточные процессоры фактически поддерживают два отдельных потока исполнения, они разделяют только вычислительное оборудование (ALU, FPU и т. Д.). Они, конечно же, не используют циклическое переключение контекста; они используют оборудование, которое другое не использует в настоящий момент. Например, один поток может идти вперед, в то время как другой ждет выборки памяти. – chbaker0

+0

@mebob Я понимаю, что вы имеете в виду, что мое понимание было неправильным. Я попытался исправить это. Не стесняйтесь редактировать с разъяснениями, я сделал это сообщество wiki. Кроме того, предлагайте свой собственный ответ. – Dougvj

6

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

  • процессоры сегодня (Intel) изготовлены в 22 нм (AMD в 32 нм) технология, которая примерно соответствует 90 диаметрам атомов кремния. Теоретический предел должен быть одним диаметром атома, но на практике вам понадобится гораздо больше. Сколько?
  • Скорость электричества. Предполагая скорость 2/3 скорости света, мы обнаруживаем, что на частоте 2 ГГц электричество будет перемещаться на 10 см (около 4 дюймов) в течение такта. Если он должен сделать что-то стоящее - например, выполнить дополнение или подобное - он должен пройти через систему подключенных устройств, которая выполняет добавление, и эти устройства должны иметь возможность переключать состояния на долю одного цикла (0,5 наносекунды). Как быстро их можно переключить?
  • Чем выше частота вращения процессора, тем больше потребляемой мощности. Чем больше потребляемой энергии, тем больше тепла производится. Чем больше тепла, тем больше требуется охлаждения или процессор расплавится во время работы. Новейшие FX-процессоры AMD потребляют 220 Вт энергии - более двух лампочек мощностью 100 Вт - и работают от 4,7, а иногда от турбо до 5 ГГц. «Должна ли« система охлаждения быть дороже, чем сам ЦП? В системах энтузиастов это иногда не в основных системах - они будут слишком дорогими для покупки.

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

В любой момент большинство компонентов, составляющих центральный процессор, не используются и теоретически доступны для обработки. Это смысл для гиперпотоков. Два разных потока выполнения могут выполняться параллельно, если они не требуют доступа к одному и тому же компоненту одновременно. Но они часто это делают. Тогда нужно остановиться и подождать другого.

С другой стороны: необходимая функциональность, которая может быть реализована на кристалле, всегда обеспечивает более быстрое выполнение, чем если бы оно было в другом месте.Внешняя память всегда будет выполняться с небольшой долей внутренней скорости процессора. Встроенная память 80286 и виртуальная память на чипе CPU. Это делало это намного быстрее, чем конкурирующие проекты, которые реализовывали функции вне чипа. В 80486 были встроенные кэши L1, хотя варианты наборов микросхем 80386 реализовывались вне чипов. Затем появились кеши второго уровня (L2) и позже L3. У Pentium был интерфейс внешней памяти, который был в два раза шире, чтобы иметь возможность считывать в два раза больше данных за тот же промежуток времени. Позже появились два или более внешних интерфейса памяти. Позже контроллеры для внешней памяти были перемещены на кристалле, чтобы меньше мешать нормальной работе. Микросхемы памяти могут доставлять два (DDR), четыре (DDR2) или восемь (DDR3) раза больше данных для каждого доступа. DDR4 работает. Как видно, интерфейс между фактическим ЦП и внешней памятью становится все более и более сложным, чтобы иметь возможность извлечь из этого немного дополнительной производительности. Реализованные решения основаны на общих сценариях доступа, которые наилучшим образом соответствуют общим случаям, так что стандартное программное обеспечение будет работать немного быстрее. Специальное программное обеспечение пытается более эффективно использовать интерфейс и может достичь поразительной производительности. Большинство других программ никогда не будет близко. Довольно много испорченных приложений даже выходят за рамки обычных шаблонов доступа и становятся медленнее, потому что они работают против интерфейса.

Если вы сделаете шаг назад, вы поймете, что «лучшее» решение было бы, если бы у него был прямой минимально сложный путь между ЦП и внешней памятью. Когда-то был стандартный компьютер, который сделал именно это - Compaq Deskpro 386/20 на основе 80386 - и вместо него использовался динамический ОЗУ (DRAM), который используется сегодня (поскольку он намного, намного дешевле единица памяти). SRAM смог идти в ногу с процессором, который на самом деле был бы медленнее во время инструкций с несколькими циклами.

Я хочу сказать, что многие факторы влияют на общую производительность аппаратного обеспечения, поэтому «производительность процессора» может означать любое количество вещей. Все они работают вместе и часто сотрудничают для достижения лучшей производительности. Иногда они делают наоборот.

Гипер-потоки сталкиваются при одновременном доступе одних и тех же ресурсов. Такие ресурсы не ограничены функциональными компонентами в ЦП. Гипер-потоки разделяют одни и те же кеши и интерфейс памяти и будут сталкиваться там тоже. Не связанные гиперпотоки с несколькими ядрами тоже будут сталкиваться, но это произойдет, когда они получат доступ к общим ресурсам, которые обычно означают интерфейс L3 и mempry. Пока они остаются в пределах эксклюзивных ресурсов (ядро, L1 и L2), они работают без перерывов.

Основная память может передавать данные с максимальной скоростью. В стандартном, плохо оптимизированном приложении он обычно работает на 100% от этой ставки. Оптимальным было бы, если бы 100% могли быть равномерно распределены между n ядрами.

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

Несколько сложный ответ, но это сложная тема :-)

+0

Я серьезно сомневаюсь, что на обычных компьютерах использовалась SRAM (статическая память) для основной памяти; вы, вероятно, думаете о SDRAM (синхронная динамическая RAM). –

+0

Я думаю, что вы что-то пропустили. SDRAM не было так долго. Думаю, это было DRAM-поколение, предшествующее DDR. Это будет вторая половина девяностых годов. DeskPro 386 был второй половиной восьмидесятых. Вот ссылка на memory4less.com и их инструкции по обновлению DeskPro 386 http://www.memory4less.com/confitems.aspx?modelid=80008453. В нем указано «36 гнезд для SRAM на основной плате памяти». В те времена дополнительная память была установлена ​​чипом чипом. DeskPro 386/16 был очень необычным в свое время. –

+0

@Paul A. Clayton: прочитайте предыдущий комментарий. –

0

Увеличение ширины одного ядра имеет геометрические расходы в области кремния и потребления энергии.

Создание нескольких копий ядра разумного размера имеет линейные затраты (+ небольшие накладные расходы для межсоединения/согласованности).

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

Недостаточно параллелизма на уровне инструкций в большинстве кодов, чтобы дать достаточно большое улучшение, чтобы оправдать более широкий дизайн. Все, что вы получаете в IPC (insns за такт), вы потеряете на тактовой частоте, потому что вы не сможете запустить его так быстро, без перегрева.

Например, через 20 лет Intel перешла от 3-х широкополосной ширины (оригинальная P6 в PPro к Pentium-M), к ширине ширины 4-х (Core2 до Skylake). x86 трудно декодировать, но проекты SnB-семейства с uop-cache могут легко иметь более широкий трубопровод LLC, чем пропускная способность декодера.

Что увеличилось, это количество портов выполнения и количество исполнительных блоков на каждом порту. В последних версиях Intel одна и та же команда может работать параллельно по разным данным. например Хасуэлл, а затем может выполнять два умножения FP за такт. IvB и ранее имеют пропускную способность одного FP mul за такт, потому что есть только один блок исполнения FP mul (на port1).

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

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


Обратите внимание, что гиперпотоковый фактически может замедлить ваш код вниз, если он может насытить выполнение ресурсов, что акции HT между жилами. Или, что еще хуже, если избыточное кеш-давление от конкурентного обмена кэшами L1/L2 приводит к гораздо большему количеству промахов кеша в каждом потоке.

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

Это небольшая победа для двух потоков, которая является узким местом на разных исполнительных устройствах. (например, перетасовать блок на port5 по сравнению с add/mul на port0/1).

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