Я не понимаю, почему производители процессоров делают многоядерные чипы. Масштабирование нескольких ядер ужасно, это сильно зависит от приложения, и я уверен, что вы можете указать на определенную программу или код, который отлично работает на многих ядрах, но большую часть времени это мусор. Это пустая трата пространства кремниевой матрицы и пустая энергия.
Игры, например, почти никогда не используют более четырех ядер. Научные и инженерные моделирования, такие как Ansys или Fluent, оцениваются в зависимости от того, сколько ядер у ПК, на котором он работает, поэтому вы платите больше, потому что у вас больше ядер, но выгода от большего количества ядер становится действительно плохой после 16 ядер, но у вас есть эти 64 ядра рабочие станции ... это пустая трата денег и энергии. Лучше купить обогреватель мощностью 1500 Вт на зиму, намного дешевле.
Почему они не делают процессор с одним большим ядром?
Я думаю, что если бы они сделали одноядерный эквивалент восьмиъядерного процессора, то это одно ядро увеличило бы IPC на 800%, так что вы получили бы полную производительность во всех программах, а не только в тех, которые оптимизированы для нескольких ядер. Больше IPC повсеместно повышает производительность, это надежный и простой способ повысить производительность. Несколько ядер увеличивают производительность только в ограниченном количестве программ, а масштабирование ужасно и ненадежно.
Ответы:
Проблема заключается в предположении, что производители процессоров могут просто добавить больше транзисторов, чтобы сделать одно ядро процессора более мощным без последствий.
Чтобы заставить процессор делать больше, вы должны планировать, что делать дальше. Есть действительно три варианта:
Заставьте ядро работать на более высокой тактовой частоте . Проблема в том, что мы уже сталкиваемся с ограничениями того, что мы можем сделать.
Потребление энергии и, следовательно, тепловыделение увеличивается с частотой - если вы удваиваете частоту, вы номинально удваиваете рассеиваемую мощность. Если вы увеличиваете напряжение, рассеиваемая мощность увеличивается с квадратом напряжения.
Межсоединения и транзисторы также имеют задержки распространения из-за неидеальной природы мира. Вы не можете просто увеличить количество транзисторов и ожидать, что сможете работать на той же тактовой частоте.
Мы также ограничены внешним оборудованием - в основном, оперативной памятью. Чтобы ускорить ЦП, необходимо увеличить пропускную способность памяти, либо ускорив его работу, либо увеличив ширину шины данных.
Добавление более сложных инструкций - вместо того, чтобы работать быстрее, мы можем добавить более богатый набор инструкций - обычные задачи, такие как шифрование и т. Д., Могут быть усилены в кремнии. Вместо того чтобы использовать много тактов для расчета в программном обеспечении, мы используем аппаратное ускорение.
Это уже делается на процессорах Complex Instruction Set (CISC). Смотрите такие вещи, как SSE2, SSE3. Сегодня одноядерное ядро гораздо мощнее, чем ядро 10 лет назад, даже если оно работает на той же тактовой частоте.
Проблема в том, что, добавляя более сложные инструкции, вы добавляете больше сложности и увеличиваете размер чипа. Как прямой результат, процессор становится медленнее - достижимые тактовые частоты падают по мере увеличения задержек распространения.
Эти сложные инструкции также не помогут вам с простыми задачами. Вы не можете ужесточить все возможные варианты использования, поэтому неизбежно большие части программного обеспечения, которое вы используете, не получат новых инструкций, и фактически будут повреждены в результате снижения тактовой частоты.
Вы также можете увеличить ширину шины данных, чтобы обрабатывать больше данных одновременно, однако, опять же, это увеличивает объем ЦП, и вы получаете компромисс между пропускной способностью, получаемой от больших шин данных, и снижением тактовой частоты. Если у вас есть только небольшие данные (например, 32-разрядные целые числа), то наличие 256-разрядного процессора на самом деле вам не поможет.
Сделайте процессор более параллельным - вместо того, чтобы пытаться сделать что-то быстрее, вместо этого делайте несколько вещей одновременно. Если задача, которую вы выполняете, пригодна для одновременного выполнения нескольких задач, то вам нужен либо один ЦП, который может выполнять несколько вычислений для каждой инструкции (одна команда с несколькими данными (SIMD)), либо иметь несколько ЦП, каждый из которых может выполнять один расчет.
Это один из ключевых драйверов для многоядерных процессоров. Если у вас запущено несколько программ или вы можете разбить одну программу на несколько задач, то наличие нескольких ядер ЦП позволяет вам выполнять больше задач одновременно.
Поскольку отдельные ядра ЦП являются фактически отдельными блоками (за исключением кэшей и интерфейсов памяти), каждое отдельное ядро меньше, чем эквивалентное монолитное ядро. Поскольку ядро более компактно, задержки распространения сокращаются, и вы можете запустить каждое ядро быстрее.
Относительно того, может ли одна программа получить пользу от наличия нескольких ядер, все зависит от того, что эта программа делает, и как она была написана.
источник
В дополнение к другим ответам, есть еще один элемент: чип доходности . Современный процессор имеет несколько миллиардов транзисторов, каждый из которых должен работать идеально, чтобы весь чип функционировал должным образом.
Делая многоядерные процессоры, вы можете чисто разделить группы транзисторов. Если в одном из ядер имеется дефект, вы можете отключить это ядро и продать чип по сниженной цене в зависимости от количества функционирующих ядер. Кроме того, вы также можете собирать системы из проверенных компонентов, как в системе SMP.
Практически для каждого процессора, который вы покупаете, он начал создаваться как топ-модель премиум-класса для этой линейки процессоров. То, что вы получите, зависит от того, какие части этого чипа работают некорректно и отключены. Intel не делает никаких процессоров i3: все они являются дефектными i7 со всеми функциями, которые разделяют линейки продуктов, потому что они не прошли тестирование. Тем не менее, части, которые все еще работают, по-прежнему полезны и могут быть проданы за гораздо более дешевые. Все, что хуже, становится брелками для ключей.
И дефекты не редкость. Идеально создать эти миллиарды транзисторов - непростая задача. Если у вас нет возможности выборочно использовать части данного чипа, цена результата будет расти очень быстро.
С помощью всего лишь одного процессора über производство - это все или ничего, что приводит к гораздо более расточительному процессу. Для некоторых устройств, таких как датчики изображения для научных или военных целей, где вам нужен огромный датчик, и все это должно работать, затраты на эти устройства настолько огромны, что их могут себе позволить только бюджеты государственного уровня.
источник
Зависимость данных
Довольно просто добавить больше инструкций за такт, сделав чип «шире» - это был «SIMD» подход. Проблема в том, что это не помогает большинству случаев использования.
Существует примерно два типа рабочей нагрузки, независимая и зависимая. Примером независимой рабочей нагрузки может быть «приведение двух последовательностей чисел A1, A2, A3 ... и B1, B2, ... и т. Д., Вычисление (A1 + B1) и (A2 + B2) и т. Д.» Этот вид рабочей нагрузки наблюдается в компьютерной графике, обработке звука, машинном обучении и так далее. Довольно много этого было уделено графическим процессорам, которые специально разработаны для этого.
Зависимая рабочая нагрузка может быть такой: «Учитывая A, добавьте к ней 5 и найдите это в таблице. Возьмите результат и добавьте 16 к нему. Найдите это в другой таблице».
Преимущество независимой рабочей нагрузки состоит в том, что она может быть разбита на множество различных частей, поэтому в этом помогает большее количество транзисторов. Для зависимых рабочих нагрузок это совсем не помогает - большее количество транзисторов может только замедлить работу . Если вам нужно получить значение из памяти, это катастрофа для скорости. Сигнал должен быть отправлен через материнскую плату со скоростью, превышающей скорость света, DRAM должен зарядить ряд и дождаться результата, а затем отправить его обратно. Это занимает десятки наносекунд. Затем, выполнив несложный расчет, вы должны отослать к следующему.
Управление энергопотреблением
Запасные ядра отключаются большую часть времени. На самом деле, на довольно многих процессорах вы не можете запускать все ядра все время, пока они не загорятся, поэтому система отключит их или отключит для вас.
Переписывание программного обеспечения - единственный путь вперед
Аппаратное обеспечение не может автоматически преобразовывать зависимые рабочие нагрузки в независимые рабочие нагрузки. Ни один не может программное обеспечение. Но программист, который готов перестроить свою систему, чтобы использовать в своих интересах множество ядер, просто мог бы.
источник
Возвращаясь во времени, процессоры не могли работать так быстро. В результате, если вы хотите больше обрабатывать, вам нужно больше процессоров. Это может быть с математическим сопроцессором, или это может быть просто с более того же процессора. Лучшим примером этого является Inmos Transputer из 80-х, который был специально разработан для массовой параллельной обработки с несколькими процессорами, соединенными вместе. Вся концепция основывалась на предположении, что нет лучшего способа увеличить вычислительную мощность, чем добавить процессоры.
Беда в том, что это предположение было (временно) неверным. Вы также можете получить больше вычислительной мощности, заставив один процессор выполнять больше вычислений. Intel и AMD нашли способы поднять тактовые частоты еще выше, и, как вы говорите, проще хранить все на одном процессоре. Результатом стало то, что до середины 2000-х годов на рынке находился быстрый одноядерный процессор. Inmos умер в начале 90-х, и весь их опыт умер вместе с ними.
Хорошие времена должны были закончиться все же. Как только тактовые частоты достигли ГГц, действительно не было возможности идти дальше. И обратно мы снова перешли на несколько ядер. Если вы действительно не можете получить быстрее, больше ядер - это ответ. Однако, как вы говорите, не всегда легко эффективно использовать эти ядра. В наши дни мы намного лучше, но нам еще далеко, чтобы сделать это так же легко, как это сделал Transputer.
Конечно, есть и другие варианты улучшения - вместо этого вы можете быть более эффективными. SIMD и аналогичные наборы инструкций позволяют выполнять больше операций за одинаковое количество тактов. DDR быстрее доставляет ваши данные в процессор и из него. Это все помогает. Но когда дело доходит до обработки, мы снова возвращаемся к 80-м и к множеству ядер.
источник
Хороший вопрос или хотя бы один с интересным ответом. Часть этого ответа отображает мир, в котором процессоры могут эффективно масштабироваться по ширине, а не с несколькими отдельными ядрами. Лицензирование / цена модели будут другими!
Остальное объясняет, почему они не могут. Резюме:
Вы не упомянули частоту, просто IPC, но масштабирование тоже сложно. Более высокая частота требует более высокого напряжения, поэтому мощность зависит
^1
от частоты в кубе : непосредственно от частоты и^2
от напряжения. (Конденсатор хранит энергию в масштабе V ^ 2, и большая часть динамической мощности за пределами тока утечки поступает от накачки заряда в емкостную нагрузку затворов + проводов FET.)Производительность = частота умножения IPC. (В рамках той же архитектуры. Более широкая SIMD позволяет выполнять ту же работу с меньшим количеством инструкций, а некоторые ISA более плотные, чем другие, например, MIPS часто требует больше инструкций для выполнения той же работы, чем x86 или AArch64.)
Затраты указаны в площади кристалла (стоимость изготовления) и / или мощности (что косвенно ограничивает частоту, поскольку охлаждение затруднено). Кроме того, снижение мощности и производительности на ватт является самоцелью, особенно для мобильных устройств (батареи) и серверов (плотность мощности / затраты на охлаждение / затраты на электроэнергию).
До того, как было задействовано многоядерное соединение на сокет, у вас были системы с несколькими сокетами для высокопроизводительных сценариев использования, где вы хотели увеличить пропускную способность, чем это было возможно с одним процессором, который мог быть изготовлен, так что это были единственные системы SMP. (Серверы, рабочие станции высокого класса).
Если бы одно ядро могло масштабироваться так эффективно, как вы хотели, у нас были бы системы с 1 физическим ядром на сокет и SMT (например, HyperThreading), чтобы они могли работать как несколько логических ядер. Типичные настольные компьютеры / ноутбуки имеют только одно физическое ядро, и мы не будем пытаться распараллелить вещи, которые не масштабируются линейно, с большим количеством ядер. например,
make -j4
чтобы использовать преимущества серверов с несколькими сокетами и / или скрыть задержку ввода-вывода на рабочем столе. (Или, может быть, мы все же попытались бы распараллелить много, если бы ширина конвейера легко масштабировалась, а IPC - нет, поэтому нам пришлось использовать больше потоков SMT.) Ядро вашей ОС все равно должно было бы работать на всех логических ядрах, если только не процессор Представления SMT для ОС сильно отличались, поэтому параллельные алгоритмы планирования и блокировки все равно были бы там необходимы.Дональд Кнут сказал в интервью 2008 года
Да, если бы у нас были чудесные одноядерные процессоры с 8-кратной пропускной способностью в реальных программах , мы, вероятно, все равно использовали бы их. С системами с двумя сокетами, только когда стоило платить гораздо больше за большую пропускную способность (не однопоточную производительность).
Несколько процессоров сокращают затраты на переключение контекста, когда работают несколько программ (позволяя им действительно работать параллельно вместо быстрого переключения между ними); упреждающая многозадачность, прерывающая работу огромного вышедшего из строя механизма, который потребует процессор, вероятно, повредит даже больше, чем сейчас.
Физически это будет одно ядро (для простой иерархии кеша без межсоединений между ядрами), но поддерживающее SMT (например, Intel HyperThreading), чтобы программное обеспечение могло использовать его как 8 логических ядер, которые динамически конкурируют за пропускную способность. Или когда только 1 поток запущен / не остановлен, он получит полную выгоду.
Таким образом, вы использовали бы несколько потоков, когда это было на самом деле проще / естественнее (например, отдельные процессы выполнялись одновременно), или для легко распараллеливающихся проблем с цепочками зависимостей, которые не позволили бы максимизировать IPC этого зверя.
Но, к сожалению, со стороны Кнута хочется думать, что многоядерные процессоры на этом этапе перестают быть чем-то особенным.
Однопоточное масштабирование производительности
Да, это правда. Если бы было возможно построить такой процессор вообще, это было бы очень удивительно. Но я думаю, что это буквально невозможно в том же процессе производства полупроводников (то есть, такое же качество / эффективность транзисторов). Это, конечно, невозможно при том же энергопотреблении и площади кристалла, что и у 8-ядерных процессоров, даже если вы сэкономите на логике для склеивания ядер и не потребует столько места для частных кэшей на ядро.
Даже если вы допустите увеличение частоты (поскольку реальный критерий - это работа в секунду, а не работа в такт), увеличение производительности даже в 2 раза быстрее будет огромной проблемой.
Если бы это было возможно в любом месте рядом с той же силой и бюджет штампом площади ( при этом производственные затраты) , чтобы построить такой процессор, да производители CPU уже будут строить их таким образом.
Смотрите современные микропроцессоры 90-минутный гид!
В частности, больше ядер или более широких ядер? раздел, для необходимого фона, чтобы понять этот ответ; все начинается с того, как работают конвейерные процессоры по порядку, а затем суперскалярно (несколько инструкций за такт). Затем объясняется, как мы достигли мощной стены прямо в эпоху P4, что привело к концу легкого масштабирования частоты, оставив в основном только IPC и выполнив больше работы по каждой инструкции (например, SIMD) в качестве пути продвижения вперед, даже с небольшими транзисторами.
Увеличение ширины конвейера (макс. Инструкций за такт) обычно масштабируется по ширине . Эта стоимость измеряется в области и / или мощности кристалла для более широкой параллельной проверки зависимостей (обнаружения опасности) и более широкого планировщика с нарушением порядка, чтобы найти готовые инструкции для выполнения. И больше портов для чтения / записи в вашем регистровом файле и кеше, если вы хотите запускать инструкции, отличные от
nop
. Особенно, если у вас есть 3-х входные инструкции, такие как FMA или add-with-carry (2 регистра + флаги).Также уменьшается отдача IPC для расширения процессоров ; большинство рабочих нагрузок имеют ограниченный ILP (параллелизм на уровне команд) для использования процессорами, поэтому расширение ядра не увеличивает IPC (количество команд за такт), если IPC уже ограничен шириной меньше ядро по цепочкам зависимостей, пропаданиям веток, пропаданиям кэша или другим остановкам. Конечно, вы получите ускорение в некоторых развернутых циклах с независимыми итерациями, но это не то, на что большинство кода тратит большую часть своего времени. Команды сравнения / ветвления составляют 20% от совокупности команд в «типичном» коде IIRC. (Я думаю, что я прочитал числа от 15 до 25% для различных наборов данных.)
Кроме того, потеря кэша, которая останавливает все зависимые инструкции (а затем и все, когда емкость ROB достигнут) стоит дороже для более широкого ЦП. (Возможные издержки, связанные с отсутствием большего количества исполнительных блоков; больше потенциальной работы не выполняется.) Или пропуск ветки аналогичным образом вызывает пузырь.
Чтобы получить 8-кратный IPC, нам нужно как минимум 8-кратное улучшение точности предсказания ветвлений и частоты обращений к кешу . Но частота попаданий в кэш плохо масштабируется, когда объем кеша превышает определенный уровень для большинства рабочих нагрузок. И предварительная загрузка HW умна, но не может быть такой умной. И при 8-кратном IPC предикторам ветвлений необходимо производить в 8 раз больше прогнозов за цикл, а также делать их более точными.
Текущие методы построения процессоров исполнения не по порядку могут находить ILP только на коротких дистанциях . Например, размер ROB в Skylake равен 224 мопам в слитых доменах, а планировщик для неисполненных мопов - в 97 неиспользуемых доменах. См. Понимание влияния lfence на цикл с двумя длинными цепочками зависимостей, для увеличения длины для случая, когда размер планировщика является ограничивающим фактором при извлечении ILP из 2 длинных цепочек инструкций, если они становятся слишком длинными. И / или увидеть этот более общий и вводный ответ ).
Таким образом, поиск ILP между двумя отдельными длинными циклами - это не то, что мы можем сделать с помощью оборудования. В некоторых случаях возможна динамическая бинарная перекомпиляция для объединения циклов, но сложная и не очень полезная для процессоров, если они не пойдут по пути Transmeta Crusoe. (слой эмуляции x86 поверх другого внутреннего ISA; в этом случае VLIW). Но стандартные современные конструкции x86 с кэшем UOP и мощными декодерами нелегко превзойти для большинства кода.
А вне x86 все ISA, которые все еще используются, относительно легко декодируются, поэтому нет никакой мотивации для динамической перекомпиляции, кроме как для оптимизации на большие расстояния. TL: DR: надежда на магические компиляторы, которые могут предоставить больше ILP аппаратному обеспечению, не сработала для Itanium IA-64 , и вряд ли будет работать для сверхширокого ЦП для любой существующей ISA с последовательной моделью исполнения.
Если бы у вас был сверхширокий ЦП, вы бы определенно хотели, чтобы он поддерживал SMT, чтобы вы могли постоянно загружать его работой, запустив несколько потоков с низким ILP.
Поскольку Skylake в настоящее время имеет ширину 4 мопа (и обеспечивает реальный IPC от 2 до 3 мопов за такт, или даже ближе к 4 в высокопроизводительном коде), гипотетический 8-кратный ЦП будет иметь ширину 32!
Быть способным разделить это обратно на 8 или 16 логических ЦП, которые динамически распределяют эти ресурсы выполнения, было бы фантастическим: не остановленные потоки получают всю полосу пропускания внешнего интерфейса и пропускную способность бэкэнда.
Но с 8 отдельными ядрами, когда поток останавливается, нет ничего другого, чтобы поддерживать загруженные исполнительные блоки; другие темы не приносят пользы.
Выполнение часто прерывистое: оно останавливается в ожидании загрузки кэша, а затем, когда это происходит, многие параллельные инструкции могут использовать этот результат. С супершироким процессором этот всплеск может идти быстрее, и он действительно может помочь с SMT.
Но у нас не может быть волшебных сверхшироких процессоров
Таким образом, чтобы получить пропускную способность, мы вместо этого должны выставлять параллелизм аппаратным средствам в форме параллелизма на уровне потоков . Обычно компиляторы не очень хорошо знают, когда и как использовать потоки, за исключением простых случаев, таких как очень большие циклы. (OpenMP или gcc
-ftree-parallelize-loops
). Человеческий ум все еще требует переделки кода, чтобы эффективно выполнять полезную работу параллельно, потому что межпотоковое взаимодействие обходится дорого, как и запуск потоков.TLP - это грубый параллелизм, в отличие от мелкозернистого ILP в пределах одного потока выполнения, который HW может использовать.
Процессоры, предназначенные для интерактивных рабочих нагрузок (такие как Intel / AMD x86 и высокопроизводительные ядра Apple / ARM AArch64), безусловно, способствуют снижению отдачи от масштабирования IPC, поскольку однопоточная производительность по-прежнему так важна, когда задержка имеет значение, а не только пропускная способность для массово параллельные проблемы.
Возможность одновременного запуска 8 копий игры со скоростью 15 кадров в секунду гораздо менее ценна, чем возможность запускать одну копию со скоростью 45 кадров в секунду. Производители процессоров знают об этом, и поэтому современные процессоры используют неупорядоченное выполнение, даже если это требует значительной мощности и площади. (Но графические процессоры этого не делают, потому что их рабочая нагрузка уже в основном параллельна).
Многоядерное аппаратное обеспечение Intel Xeon Phi (Knight's Landing / Knight's Mill) представляет собой интересный промежуточный пункт: очень ограниченное выполнение по порядку и SMT, чтобы ядра 2-ширины обеспечивались SIMD-инструкциями AVX512 для сокращения чисел. Ядра основаны на архитектуре Intel Silvermont с низким энергопотреблением. (Exec-out exec, но с небольшим окном переупорядочения, намного меньшим, чем у крупного семейства Sandybridge. И более узкий конвейер.)
Кстати, все это ортогонально SIMD. Выполнение большей работы по каждой инструкции всегда помогает, если это возможно для вашей проблемы.
Модели ценообразования
Модели ценообразования программного обеспечения основаны на текущем аппаратном обеспечении.
Модели с многоядерным лицензированием стали более распространенными (и применимыми даже к настольным ПК с одним сокетом) с появлением многоядерных процессоров. До этого это было актуально только для серверов и больших рабочих станций.
Если бы программному обеспечению не требовалось многоядерных процессоров для работы на максимальной скорости, на самом деле не было бы способа продавать его дешевле людям, которые не получают от него такой большой выгоды, потому что работают на более слабом процессоре. Если, возможно, программно-аппаратная экосистема не разработала элементы управления на «каналах SMT», которые позволяют настроить максимальную ширину выполнения для кода, выполняемого на этом логическом ядре. (Снова представьте мир, в котором процессоры масштабируются по ширине конвейера вместо нескольких отдельных ядер.)
источник
Позвольте мне провести аналогию:
Если у вас есть обезьяна, которая печатает на пишущей машинке, и вы хотите, чтобы больше печатания было сделано, вы можете дать обезьяне кофе, печатать уроки и, возможно, создавать угрозы, чтобы заставить ее работать быстрее, но наступает момент, когда обезьяна будет печатать на максимальной мощности.
Поэтому, если вы хотите больше печатать, вам нужно больше обезьян.
Чтобы продолжить аналогию, вам нужна отдельная пишущая машинка для каждой обезьяны (представляющая собой шину данных, в которой будет нуждаться каждое ядро), вам нужен способ доставить бананы каждой обезьяне и что-то, чтобы поднять их помет (аналогично распределению мощности и нагреву). рассеяния), и вам нужен способ убедиться, что все обезьяны не пытаются напечатать один и тот же пассаж в Двенадцатой ночи (аналогично правильному разделению рабочей нагрузки между процессорами). Но все это меньше работы для большего выигрыша, чем попытка набрать больше текста у одной обезьяны.
источник
Вы указываете, что во многих программах используется не более (x) ядер. Но это полностью ограничение, налагаемое разработчиками этого программного обеспечения. Домашние ПК с несколькими ядрами все еще являются новыми (иш), и разработка многопоточных программ также сложнее с традиционными API и языками.
Ваш ПК также не только запускает эту 1 программу. Он делает целый ряд других вещей, которые можно поместить на менее активные ядра, чтобы ваше основное программное обеспечение не прерывалось ими так сильно.
В настоящее время невозможно просто увеличить скорость одного ядра в соответствии с пропускной способностью 8 ядер. Больше скорости, вероятно, придет от новой архитектуры.
Поскольку все больше ядер доступно и API разработаны с таким предположением, программисты начнут использовать больше ядер. Предпринимаются усилия по упрощению создания многопоточных конструкций. Если бы вы задали этот вопрос через несколько лет, вы, вероятно, сказали бы: «Мои игры обычно используют только 32 ядра, так почему у моего процессора 256?».
источник
Наиболее убедительной причиной с исторической точки зрения является рассеяние энергии .
После Pentium IV Intel попыталась создать процессор нового поколения с кодовым названием Tejas, который должен был работать в диапазоне от 4 ГГц до 12 ГГц. Проблема заключалась в том, что бег с такой скоростью генерировал слишком много тепла, чтобы быть жизнеспособным.
После того, как Tejas был отменен, Intel потребовалось еще 10–15 лет, прежде чем они, наконец, получили ядра с тактовой частотой 4 ГГц с приемлемым уровнем нагрева.
Смотри Теджас и Джейхок .
У Intel был еще один проект параллельно с Tejas, который включал использование нескольких ядер. В этом проекте были приемлемые уровни тепла, так что они пошли тем же путем. Это позволило им повысить производительность сейчас, а не ждать еще 10 лет для процессов изготовления 10 нм.
Если предположить, что ядра не испытывают недостатка ресурсов, то для получения одинакового количества инструкций в секунду от одного ядра вместо N ядер вам потребуется скорость выполнения инструкций для этого одного ядра в N раз быстрее. Динамическое рассеивание мощности ядра ЦП линейно пропорционально рабочей частоте. Он также пропорционален квадрату рабочего напряжения. Работа на более низких частотах позволяет использовать более низкие рабочие напряжения. Использование более низких напряжений на более низких частотах означает, что фактически выделяемое тепло снижается вместе с кубом рабочей частоты.
Крайним примером этого является человеческий мозг, который может выполнять эквивалент 2 ^ 18 операций в секунду, используя только 20 Вт мощности. Это достигается благодаря использованию миллиардов нейронов, работающих параллельно с частотой всего несколько сотен Гц.
Также имейте в виду, что на ПК обычно работают одновременно сотни или тысячи потоков. Операционная система обрабатывает распределение времени на ядре для каждого потока. Таким образом, даже если отдельная программа не использует преимущества всех ядер, она все равно выигрывает, потому что другие программы занимают меньше времени своего процессора, если они работают на другом ядре.
Во всяком случае, рынок высокопроизводительных систем переходит к более параллельной обработке в виде ПЛИС. Недавно Intel купила Altera (второй по величине производитель FPGA) и теперь продает платы с аппаратным ускорителем FPGA. Программное обеспечение может загружать FPGA с изображением во время выполнения, используя вызов API. Затем процессор подает данные в FPGA и позволяет ему выполнять большую часть работы. Типы приложений - это обычно кодирование видео, AI, рендеринг, поиск в базе данных и т. Д.
источник
Просто чтобы завершить картину того, где все это происходит ...
Нейронные сети и ИИ - супер горячие темы на данный момент. Одна из причин заключается в том, что можно эффективно использовать огромное количество простых ядер параллельно и, таким образом, получать максимальную производительность вычислений. Это требование по своей сути является параллельным и довольно легко отображается на массив процессоров без особой связи между ядрами. Вот почему графические процессоры стали первой технологией ускорения искусственного интеллекта. Сейчас мы видим, что чипы, оптимизированные даже лучше, чем видеокарты для NN, выходят на рынок. Следующий или, может быть, последний шаг - создание NN с использованием аналоговых технологий, таких как мемристоры.
И, кроме того, в чем-то вроде игрового ПК производительность графической карты намного выше, чем у многоядерного процессора Intel или AMD.
источник
По сути, потери CMOS экспоненциально (^ 1.5) пропорциональны частоте, а производительность параллельного ЦП несколько меньше, чем линейная, пропорциональна количеству ЦП.
Таким образом, соотношение между вычислительной мощностью и рассеиваемой мощностью улучшается для многопроцессорных приложений с разными тактовыми частотами при сравнении скорости с количеством ЦП для фиксированного рассеивания мощности.
Это сложнее, чем это, но это основные принципы, почему параллельные процессоры лучше работают на динамику в ваттах. Всегда будут исключения при оптимизации для одного сценария.
Это не размер большего CPU, который делает его более быстрым для типичных приложений Intel / AMD для ПК, скорее это уменьшенный размер из-за литографического разрешения и более низкой емкости затвора, который уменьшает мощность наряду с уменьшенным подпороговым уровнем и напряжением ядра.
Улучшение не является линейным и не означает, что 8 ядер в 4 раза лучше, чем 2, но цель, если она достигнута, состоит в том, чтобы иметь больший динамический диапазон обработки с регулированием рассеивания мощности, скорости и напряжения для повышения как производительности, так и эффективности, а также пиковой мощности по требованию без чрезмерное повышение температуры.
Для более научного ответа прочитайте https://www.sciencedirect.com/topics/computer-science/dynamic-power-consump
источник
Многоядерные обычно не являются мультискалярными. И мультискалярные ядра не являются многоядерными.
Было бы неплохо найти мультискалярную архитектуру, работающую на несколько мегагерц, но в целом ее мосты были бы не потребительскими, а дорогостоящими, поэтому тенденция к многоядерному программированию на более низкой частоте, а не к коротким инструкциям на высоких тактовых частотах.
Множество ядер инструкций дешевле и проще в управлении, поэтому плохая идея иметь мультискалярную архитектуру в несколько гигагерц.
источник
vpaddd ymm0, ymm1, ymm2
инструкции за такт, каждая из которых выполняет 8 упакованных 32-разрядных целочисленных сложений. Таким образом, 24 целых числа добавляются за такт, но механизм выполнения не по порядку «только» должен отслеживать 3 инструкции в полете. Это гораздо дешевле построить, чем процессор, который может выполнять 24add eax, edx
инструкции за такт. SIMD в основном ортогонален ширине трубопровода.