108

В 2014 году я слышал, что многие языки программирования рекламируются за их возможности параллелизма. Считается, что параллелизм имеет решающее значение для повышения производительности.

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

Некоторые ключевые цитаты:

Мы привыкли видеть, что процессоры с тактовой частотой 500 МГц уступают процессорам с тактовой частотой 1 ГГц, уступая процессорам с тактовой частотой 2 ГГц и так далее. Сегодня мы находимся в диапазоне 3GHz на основных компьютерах.

Ключевой вопрос: когда это закончится? В конце концов, закон Мура предсказывает экспоненциальный рост, и явно экспоненциальный рост не может продолжаться вечно, пока мы не достигнем жестких физических ограничений; свет не становится быстрее Рост должен в конце концов замедлиться и даже закончиться.

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

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

...Multicore - это запуск двух или более реальных процессоров на одном чипе.

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

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

Но частью решения, похоже, являются многоядерные архитектуры. Если компьютеры не увеличиваются в размерах (чего у них нет), то это, похоже, еще один способ сказать: "соберите больше мощности в одно и то же пространство".

Почему "добавление большего количества ядер" не сталкивается с теми же физическими ограничениями, что и "ускорение работы процессора"?

Пожалуйста, объясните в самых простых терминах, которые вы можете. :)

13 ответов13

142

Резюме

  • Экономика. Дешевле и проще спроектировать процессор с большим количеством ядер, чем с более высокой тактовой частотой, потому что:

  • Значительное увеличение энергопотребления. Энергопотребление процессора быстро увеличивается при увеличении тактовой частоты - вы можете удвоить количество ядер, работающих с меньшей скоростью, в тепловом пространстве, необходимом для увеличения тактовой частоты на 25%. Четырехместный на 50%.

  • Есть и другие способы увеличить скорость последовательной обработки, и производители процессоров используют их.


Я собираюсь опираться на превосходные ответы на этот вопрос на одном из наших дочерних сайтов SE. Так что иди голосуй!


Ограничение тактовой частоты

Есть несколько известных физических ограничений тактовой частоты:

  • Время передачи

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

    Тем не менее, мы еще не там. 1 ГГц означает одну наносекунду за такт. За это время свет может пройти 30см. На частоте 10 ГГц свет может перемещаться на 3 см. Ширина одного ядра составляет около 5 мм, поэтому мы столкнемся с этими проблемами где-то за 10 ГГц. 2

  • Задержка переключения

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

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

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

  • Тепловыделение / энергопотребление

    Это большой. Цитата из ответа fuzzyhair2:

    Последние процессоры производятся с использованием технологии CMOS. Каждый раз, когда есть тактовый цикл, мощность рассеивается. Следовательно, более высокие скорости процессора означают большее рассеивание тепла.

    В этой ветке форума AnandTech есть несколько прекрасных измерений, и они даже вывели формулу для потребления энергии (которая идет рука об руку с выработанным теплом):

    формула
    Кредит на Idontcare

    Мы можем представить это на следующем графике:

    график
    Кредит на Idontcare

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

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


Больше ядер?

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

Да, многоядерный также увеличивает требуемую мощность и тепловыделение. Но это аккуратно избегает вопросов о времени передачи и задержке переключения. И, как видно из графика, вы можете легко удвоить количество ядер в современном процессоре с такими же тепловыми затратами, как и увеличение тактовой частоты на 25%.

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

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

У многоядерной системы есть и обратная сторона: вам нужно больше физического пространства для установки дополнительного ядра. Тем не менее, объемы процессов ЦП постоянно сильно уменьшаются, поэтому есть достаточно места для размещения двух копий предыдущего проекта - реальный компромисс не в том, чтобы создать более крупные, более сложные одноядерные процессоры. Опять же, увеличение сложности ядра - это плохо с точки зрения дизайна - больше сложности = больше ошибок / ошибок и производственных ошибок. Кажется, мы нашли счастливую среду с эффективными ядрами, которые достаточно просты, чтобы не занимать слишком много места.

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


Другие способы улучшить производительность

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

Итак, что еще мы можем сделать? Как современные процессоры намного быстрее, чем старые на той же тактовой частоте?

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

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

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

Есть другой способ: более специализированные инструкции. Мы видели такие вещи, как SSE, которые предоставляют инструкции для обработки больших объемов данных за один раз. Постоянно вводятся новые наборы инструкций с похожими целями. Это, опять же, требует программной поддержки и увеличивает сложность аппаратного обеспечения, но обеспечивает хороший прирост производительности. Недавно появился AES-NI, который обеспечивает аппаратно-ускоренное шифрование и дешифрование AES, гораздо быстрее, чем куча арифметических программ, реализованных в программном обеспечении.


1 Не без получения достаточно глубоко в теоретической квантовой физики, так или иначе.

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

14

Физика есть физика. Мы не можем вечно упаковывать больше транзисторов в меньшие пространства. В какой-то момент он становится настолько маленьким, что вы сталкиваетесь со странным квантовым дерьмом. В какой-то момент мы не можем упаковать вдвое больше транзисторов в год, чем мы привыкли (о чем говорит закон Мура).

Сырые часы ничего не значат. Мой старый Pentium M был примерно вдвое меньше тактовой частоты современного настольного процессора (и все же во многих отношениях быстрее) - и современные системы едва приближаются к скоростям систем 10 лет назад (и явно быстрее). По сути, «просто» увеличение тактовой частоты во многих случаях не дает реального прироста производительности. Это может помочь в некоторых однопоточных операциях, но вам лучше потратить бюджет на повышение эффективности с точки зрения всего остального.

Несколько ядер позволяют вам делать две или более вещи одновременно, поэтому вам не нужно ждать, пока одна вещь закончится для следующей. В более короткие сроки вы можете просто вставить два существующих ядра в один и тот же пакет (например, с Pentium D и их MCM, который был переходным проектом), и у вас есть система, которая в два раза быстрее. Большинство современных реализаций действительно разделяют такие вещи, как контроллер памяти.

Вы также можете построить умнее по-разному. ARM делает Big-Little - 4 «слабых» ядра с низким энергопотреблением работают вместе с 4 более мощными ядрами, так что вы получите лучшее из обоих миров. Intel позволяет снизить частоту вращения (для повышения эффективности энергопотребления) или разгонять отдельные ядра (для повышения производительности однопотокового режима). Я помню, что AMD что-то делает с модулями.

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

В какой-то момент «больше» ядер могут не работать - хотя графические процессоры имеют сотни ядер.

Multicores как таковой позволяет компьютерам работать умнее во всех этих отношениях.

9

Простой ответ

Самый простой ответ на вопрос

Почему "добавление большего количества ядер" не сталкивается с теми же физическими ограничениями, что и "ускорение работы процессора"?

на самом деле находится в другой части вашего вопроса:

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

По сути, несколько ядер - это все равно что иметь несколько "компьютеров" на одном устройстве.

Комплексный ответ

"Ядро" - это часть компьютера, которая фактически обрабатывает инструкции (сложение, умножение, "и" и т.д.). Ядро может выполнять только одну инструкцию за один раз. Если вы хотите, чтобы ваш компьютер был "более мощным", вы можете сделать две основные вещи:

  1. Увеличение пропускной способности (увеличение тактовой частоты, уменьшение физического размера и т.д.)
  2. Используйте больше ядер на одном компьютере

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

Есть важное ограничение # 2: вы должны быть в состоянии разбить вашу проблему на несколько независимых проблем, а затем объединить ответ. На современном персональном компьютере это на самом деле не проблема, так как существует множество независимых проблем, все равно борющихся за вычислительное время с ядром (ями). Но при выполнении интенсивных вычислительных задач многоядерные процессоры действительно помогают, только если проблема поддается параллелизму.

6

Почему "добавление большего количества ядер" не сталкивается с теми же физическими ограничениями, что и "ускорение работы процессора"?

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

Факт 1: Потребляемая мощность и излучаемое тепло растут быстрее, чем вычислительная мощность. Повышение частоты процессора от 1 ГГц до 2 ГГц приведет к увеличению потребляемой мощности с 20 Вт до 80 Вт, так же как и с рассеиваемым теплом. (Я просто составил эти цифры, но это вполне так работает)

Факт 2: покупка второго процессора и работа на частоте 1 ГГц удвоит ваши вычислительные мощности. Два ЦП, работающие на частоте 1 ГГц, могут обрабатывать такое же количество данных, что и один ЦП на 2 ГГц, но каждый из них потребляет всего 20 Вт энергии, то есть всего 40 Вт.

Прибыль: Удвоение числа процессоров вместо тактовой частоты экономит нам энергию, и мы не так близки к "частотному барьеру", как раньше.

Проблема: Вы должны разделить работу между двумя процессорами и объединить результаты позже.

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

Теперь вам просто нужно объединить два ЦП в один двухъядерный ЦП, и вы дома. Это полезно, потому что ядра могут совместно использовать некоторые части ЦП, например, кеш (связанный ответ).

5

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

Я думаю, что эта проблема многомерна, и для того, чтобы нарисовать более полную картину, потребуется некоторое написание:

  1. Физические ограничения (наложенные реальной физикой): Как скорость света, квантовая механика, все это.
  2. Производственные проблемы: как мы можем изготовить конструкции меньшего размера с необходимой точностью? Проблемы, связанные с сырьем, материалы, используемые для построения цепей, долговечность.
  3. Архитектурные проблемы: тепло, логический вывод, энергопотребление и т.д.
  4. Экономические проблемы: Какой самый дешевый способ повысить производительность для пользователя?
  5. Варианты использования и восприятие пользователем производительности.

Там может быть много больше. Многофункциональный процессор пытается найти решение, позволяющее объединить все эти факторы (и даже больше) в один, массово производимый чип, который подходит 93% участников рынка. Как видите, последний пункт является наиболее важным, восприятие клиента, которое напрямую зависит от того, как клиент использует процессор.

Спросите себя, каково ваше обычное применение? Возможно: 25 вкладок Firefox, каждая из которых воспроизводит несколько рекламных объявлений в фоновом режиме, пока вы слушаете музыку, все в ожидании своей работы по сборке, которую вы начали около 2 часов назад, чтобы закончить. Это большая работа, которую нужно сделать, и все же вы хотите получить приятный опыт. Но ваш процессор может справиться с ОДНОЙ задачей за раз! На одну вещь. Так что вы делаете, вы разделяете вещи и делаете длинную очередь, и каждый получает свою долю, и все счастливы. За исключением вас, потому что все становится медленным и совсем не гладким.

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

Это возвращает нас туда, откуда мы начали. Выполняем вещи параллельно. Давайте добавим еще одно ядро. Теперь мы можем сделать две вещи одновременно. Итак, давайте немного остудим и напишем программное обеспечение, которое может разделить его работу на два, менее мощных, но более функциональных ядра. У этого подхода есть две основные проблемы (кроме того, что для того, чтобы мир программного обеспечения адаптировался к нему, требуется время): 1. Сделайте чип больше или сделайте отдельное ядро меньше. 2. Некоторые задачи просто не могут быть разделены на две части, которые выполняются одновременно. Добавляйте ядра до тех пор, пока вы можете уменьшить их, или увеличьте размер чипа и не допускайте перегрева. Ох, и давайте не будем забывать клиента. Если мы изменим наши варианты использования, отрасли должны адаптироваться. Посмотрите все блестящие "новые" вещи, которые придумал мобильный сектор. Вот почему мобильный сектор считается настолько важным, и каждый хочет в него попасть.

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

Последнее, но не менее важное: физика. Квантовая механика ограничит сжатие стружки. Скорость света еще не предел, так как электроны не могут двигаться со скоростью света в кремнии, на самом деле она намного медленнее. Кроме того, именно импульсная скорость ставит жесткий предел скорости, предлагаемой материалом. Так же, как звук распространяется в воде быстрее, чем в воздухе, электрические импульсы распространяются, например, в графене, чем в кремнии. Это приводит к сырью. Графен великолепен в том, что касается его электрических свойств. Это сделало бы намного лучший материал для сборки процессоров, к сожалению, это очень трудно производить в большом количестве.

2

Скажем (в качестве нереального примера, но все же следует разобраться в этом) у вас есть процессор, работающий на 100F. Обычно многоядерный процессор работает, беря тактовую частоту процессора, работающую на 100F, и понижая ее, тем самым снижая частоту. Поскольку он больше не работает как горячий, они могут переключаться на секунду, третье или даже четвертое место рядом с ним, не оказывая значительного влияния на общую температуру процессора и получая преимущества от многоядерности. Это, очевидно, связано с некоторыми накладными расходами, поскольку ядра все еще должны контролироваться из одного места, одним ядром. Чем больше ядер вы добавляете, тем больше накладных расходов. Что касается одноядерных процессоров, то чем больше вы увеличиваете их скорость, тем больше тепла они генерируют. Это, очевидно, имеет физические ограничения (т.е. после определенного момента он начинает ухудшать производительность и даже опасен, если работает слишком жарко)

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

2

Я бы сказал, что основное ограничение на пределы вычислительной мощности связано, прежде всего, с ограничением скорости, с которой мы можем перемещать электрон по цепи (скорость дрейфа легких электронов). Есть много других факторов, как вы упомянули.

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

Закон Мура - очень интересное и информативное чтение. Эта цитата, в частности, актуальна здесь:

Можно также ограничить теоретическую производительность довольно практичного "ультрасовременного ноутбука" массой в один килограмм и объемом в один литр. Это делается с учетом скорости света, квантовой шкалы, гравитационной постоянной и постоянной Больцмана, что дает производительность 5,4258 × 10 50 логических операций в секунду на скорости примерно 10 31 бит.

2

CPU = автомобильный двигатель. Легче сделать более мощный автомобиль с 16 клапанами, т.е. lamborghini, чем автомобиль с высокой скоростью вращения, у которого был бы один гигантский клапан / цилиндр при 100 000 об / мин.

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

1

Длинная история еще короче:

Нам действительно не нужны более быстрые процессоры. За исключением нескольких узкоспециализированных применений * ЦП не был узким местом в течение многих лет - все периферийные биты, такие как память, хранилище и сеть, обычно заставляют ЦП ждать миллионы тактов, в течение которых он может выполнять другие действия. Второе ядро может делать больше "других вещей", создавая ощущение более высокой производительности для пользователя.

Многие мобильные устройства, ноутбуки и т.д. Разгоняют процессор для увеличения времени автономной работы и более низких температур. Нет особого стимула для разработки ядра ARM с частотой 3,5 ГГц, если ваш основной клиент использует его на частоте 1,3 ГГц.

  • эти специализированные приложения не покупают достаточно, чтобы оправдать разработку ядра 5 ГГц. Они также не заботятся о тепле или мощности - купите самую быструю из имеющихся, разгоните ее и прикрутите к радиатору с водяным охлаждением размером с тостер.
1

Краткий и простой ответ:

Почему при переходе от 1 грузовика к 100 грузовикам, перевозящему в 100 раз больше, не возникают те же физические ограничения, что при переходе от 1 грузовика со скоростью 100 миль в час до 1 грузовика со скоростью 10000 миль в час?

Ответьте на этот вопрос, и ваш вопрос также будет дан ответ. Концепция примерно такая же.

1

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

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

0

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

0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .