Параллельные вычисления
Параллельные вычисления — это тип вычислений , при котором множество вычислений или процессов выполняются одновременно. [1] Большие проблемы часто можно разделить на более мелкие, которые затем можно решить одновременно. Существует несколько различных форм параллельных вычислений: параллелизм на уровне битов , на уровне команд , данных и параллелизм задач . Параллелизм уже давно используется в высокопроизводительных вычислениях , но приобрел более широкий интерес из-за физических ограничений, препятствующих масштабированию частоты . [2] Поскольку энергопотребление (и, следовательно, выделение тепла) компьютерами в последние годы стало проблемой, [3] параллельные вычисления стали доминирующей парадигмой в компьютерной архитектуре , главным образом в виде многоядерных процессоров . [4]
В информатике и параллелизм — параллелизм это две разные вещи: параллельная программа использует несколько ядер ЦП , каждое из которых выполняет задачу независимо. С другой стороны, параллелизм позволяет программе выполнять несколько задач даже на одном ядре ЦП; ядро переключается между задачами (т.е. потоками ), не обязательно завершая каждую из них. Программа может иметь обе характеристики параллелизма и параллелизма, ни одну из них или их комбинацию. [5]
Параллельные компьютеры можно грубо классифицировать по уровню, на котором оборудование поддерживает параллелизм: многоядерные и многопроцессорные компьютеры имеют несколько вычислительных элементов на одной машине, тогда как кластеры , MPP и сетки используют несколько компьютеров для работы на одной машине. задача. Специализированные параллельные компьютерные архитектуры иногда используются наряду с традиционными процессорами для ускорения конкретных задач.
В некоторых случаях параллелизм прозрачен для программиста, например, при параллелизме на уровне битов или на уровне команд, но явно параллельные алгоритмы , особенно те, которые используют параллелизм, писать труднее, чем последовательные . [6] потому что параллелизм вводит несколько новых классов потенциальных ошибок программного обеспечения , из которых состояния гонки наиболее распространены . Связь и синхронизация между различными подзадачами обычно являются одними из самых серьезных препятствий на пути достижения оптимальной производительности параллельных программ.
Теоретическая верхняя граница ускорения , который гласит , одной программы в результате распараллеливания дается законом Амдала что оно ограничено долей времени, в течение которого может использоваться распараллеливание.
Предыстория [ править ]
Традиционно компьютерное программное обеспечение писалось для последовательных вычислений . Для решения проблемы алгоритм конструируется и реализуется в виде последовательного потока инструкций. Эти инструкции выполняются на центральном процессоре одного компьютера. Одновременно может выполняться только одна инструкция — после завершения этой инструкции выполняется следующая. [7]
С другой стороны, параллельные вычисления используют несколько элементов обработки одновременно для решения проблемы. Это достигается путем разбиения задачи на независимые части, чтобы каждый обрабатывающий элемент мог выполнять свою часть алгоритма одновременно с другими. Элементы обработки могут быть разнообразными и включать в себя такие ресурсы, как один компьютер с несколькими процессорами, несколько сетевых компьютеров, специализированное оборудование или любую комбинацию вышеперечисленного. [7] Исторически параллельные вычисления использовались для научных вычислений и моделирования научных проблем, особенно в естественных и технических науках , таких как метеорология . Это привело к разработке параллельного аппаратного и программного обеспечения, а также высокопроизводительных вычислений . [8]
Масштабирование частоты было основной причиной повышения производительности компьютеров с середины 1980-х до 2004 года. Время выполнения программы равно количеству инструкций, умноженному на среднее время выполнения каждой инструкции. Сохраняя все остальное постоянным, увеличение тактовой частоты уменьшает среднее время, необходимое для выполнения инструкции. Таким образом, увеличение частоты уменьшает время выполнения всех программ, связанных с вычислениями . [9] Однако энергопотребление P чипа определяется уравнением P = C × V 2 × F , где C — емкость , переключаемая за такт (пропорциональная количеству транзисторов, входы которых изменяются), V — напряжение , а F — частота процессора (циклов в секунду). [10] Увеличение частоты увеличивает количество энергии, используемой процессором. Увеличение энергопотребления процессоров в конечном итоге привело к отмене Intel 8 мая 2004 года своих процессоров Tejas и Jayhawk , что обычно называют концом масштабирования частоты как доминирующей парадигмы компьютерной архитектуры. [11]
Чтобы решить проблему энергопотребления и перегрева, производители основных центральных процессоров (ЦП или процессоров) начали выпускать энергоэффективные процессоры с несколькими ядрами. Ядро — это вычислительная единица процессора, а в многоядерных процессорах каждое ядро независимо и может одновременно обращаться к одной и той же памяти. Многоядерные процессоры принесли параллельные вычисления на настольные компьютеры . Таким образом, распараллеливание последовательных программ стало основной задачей программирования. В 2012 году четырехъядерные процессоры стали стандартом для настольных компьютеров , а серверы имеют более 10 ядерных процессоров. На основе закона Мура можно предсказать, что количество ядер на процессор будет удваиваться каждые 18–24 месяца. Это может означать, что после 2020 года типичный процессор будет иметь десятки или сотни ядер, однако на самом деле стандарт находится где-то в районе от 4 до 16 ядер, при этом некоторые конструкции имеют сочетание ядер производительности и эффективности (например, Big. НЕБОЛЬШАЯ конструкция) из-за тепловых и конструктивных ограничений. [12] [ нужна ссылка ]
Операционная система может гарантировать, что различные задачи и пользовательские программы выполняются параллельно на доступных ядрах. Однако для того, чтобы последовательная программа могла в полной мере воспользоваться преимуществами многоядерной архитектуры, программисту необходимо реструктурировать и распараллелить код. Ускорение выполнения прикладного программного обеспечения больше не будет достигаться за счет масштабирования частоты, вместо этого программистам придется распараллеливать свой программный код, чтобы воспользоваться преимуществами растущей вычислительной мощности многоядерных архитектур. [13]
Закон Амдала и закон Густавсона [ править ]
В оптимальном случае ускорение от распараллеливания должно быть линейным: удвоение количества обрабатывающих элементов должно сократить время выполнения вдвое, а его удвоение во второй раз должно снова сократить время выполнения вдвое. Однако очень немногие параллельные алгоритмы достигают оптимального ускорения. Большинство из них имеют почти линейное ускорение при небольшом количестве обрабатывающих элементов, которое сглаживается до постоянного значения при большом количестве обрабатывающих элементов.
Потенциальное ускорение алгоритма на параллельной вычислительной платформе определяется законом Амдала. [14]
где
- S Задержка — это потенциальное ускорение задержки ; выполнения всей задачи
- s — ускорение задержки выполнения распараллеливаемой части задачи;
- p — процент времени выполнения всей задачи относительно распараллеливаемой части задачи до распараллеливания .
Поскольку S задержка < 1/(1 - p ) показывает, что небольшая часть программы, которую нельзя распараллелить, будет ограничивать общее ускорение, доступное за счет распараллеливания. Программа, решающая большую математическую или инженерную задачу, обычно состоит из нескольких распараллеливаемых частей и нескольких нераспараллеливаемых (последовательных) частей. Если на нераспараллеливаемую часть программы приходится 10% времени выполнения ( p = 0,9), мы можем получить ускорение не более чем в 10 раз, независимо от того, сколько процессоров будет добавлено. Это накладывает верхний предел на полезность добавления дополнительных параллельных исполнительных блоков. «Когда задача не может быть разделена из-за последовательных ограничений, приложение дополнительных усилий не влияет на график. Вынашивание ребенка занимает девять месяцев, независимо от того, сколько женщин назначено». [15]
Закон Амдала применим только к случаям, когда размер задачи фиксирован. На практике, когда становится доступно больше вычислительных ресурсов, они имеют тенденцию использоваться для решения более крупных задач (больших наборов данных), и время, затрачиваемое на распараллеливаемую часть, часто растет намного быстрее, чем на последовательную работу по своей сути. [16] В этом случае закон Густавсона дает менее пессимистическую и более реалистичную оценку параллельной работы: [17]
И закон Амдала, и закон Густавсона предполагают, что время работы последовательной части программы не зависит от количества процессоров. Закон Амдала предполагает, что вся задача имеет фиксированный размер, так что общий объем работы, которую необходимо выполнить параллельно, также не зависит от количества процессоров , тогда как закон Густавсона предполагает, что общий объем работы, которую необходимо выполнить параллельно, изменяется линейно с увеличением количество процессоров .
Зависимости [ править ]
Понимание зависимостей данных имеет основополагающее значение для реализации параллельных алгоритмов . Ни одна программа не может работать быстрее, чем самая длинная цепочка зависимых вычислений (известная как критический путь ), поскольку вычисления, зависящие от предыдущих вычислений в цепочке, должны выполняться по порядку. Однако большинство алгоритмов представляют собой не просто длинную цепочку зависимых вычислений; обычно есть возможность параллельно выполнять независимые вычисления.
Пусть P i и P j — два сегмента программы. Условия Бернштейна [18] описать, когда они независимы и могут выполняться параллельно. Для P i пусть I i будет всеми входными переменными, а O i — выходными переменными, и аналогично для P j . Pi они и Pj удовлетворяют независимы, если
Нарушение первого условия приводит к зависимости потока, соответствующей тому, что первый сегмент создает результат, используемый вторым сегментом. Второе условие представляет собой антизависимость, когда второй сегмент создает переменную, необходимую первому сегменту. Третье и последнее условие представляет собой зависимость вывода: когда два сегмента записывают в одно и то же место, результат поступает из логически последнего выполненного сегмента. [19]
Рассмотрим следующие функции, которые демонстрируют несколько видов зависимостей:
1: function Dep(a, b) 2: c := a * b 3: d := 3 * c 4: end function
В этом примере инструкция 3 не может быть выполнена раньше (или даже параллельно) инструкции 2, поскольку инструкция 3 использует результат инструкции 2. Она нарушает условие 1 и, таким образом, вводит зависимость от потока.
1: function NoDep(a, b) 2: c := a * b 3: d := 3 * b 4: e := a + b 5: end function
В этом примере между инструкциями нет зависимостей, поэтому все они могут выполняться параллельно.
Условия Бернштейна не позволяют распределять память между разными процессами. Для этого необходимы некоторые средства обеспечения порядка между доступами, такие как семафоры , барьеры или какой-либо другой метод синхронизации .
гонки, взаимное исключение, синхронизация и параллельное замедление Условия
Подзадачи в параллельной программе часто называют потоками . В некоторых параллельных компьютерных архитектурах используются меньшие и облегченные версии потоков, известные как волокна , в то время как в других используются более крупные версии, известные как процессы . Однако «потоки» обычно воспринимаются как общий термин для подзадач. [20] Потокам часто требуется синхронизированный доступ к объекту или другому ресурсу , например, когда им необходимо обновить переменную , которая является общей для них. Без синхронизации инструкции между двумя потоками могут чередоваться в любом порядке. Например, рассмотрим следующую программу:
Нить А | Нить Б |
1A: Чтение переменной V | 1B: Чтение переменной V |
2A: добавьте 1 к переменной V. | 2B: Добавьте 1 к переменной V. |
3A: обратная запись в переменную V | 3B: обратная запись в переменную V |
Если инструкция 1B выполняется между 1A и 3A или если инструкция 1A выполняется между 1B и 3B, программа выдаст неверные данные. Это известно как состояние гонки . Программист должен использовать блокировку для обеспечения взаимного исключения . Блокировка — это конструкция языка программирования, которая позволяет одному потоку получить контроль над переменной и запретить другим потокам читать или записывать ее, пока эта переменная не будет разблокирована. Поток, удерживающий блокировку, может свободно выполнить свою критическую секцию (раздел программы, требующий монопольного доступа к некоторой переменной) и разблокировать данные после ее завершения. Поэтому, чтобы гарантировать правильное выполнение программы, приведенную выше программу можно переписать с использованием блокировок:
Нить А | Нить Б |
1A: Блокировка переменной V | 1B: Блокировка переменной V |
2A: Чтение переменной V | 2B: прочитать переменную V |
3A: Добавьте 1 к переменной V. | 3B: Add 1 to variable V |
4A: обратная запись в переменную V. | 4B: обратная запись в переменную V. |
5A: Unlock variable V | 5B: Разблокировать переменную V |
Один поток успешно заблокирует переменную V, а другой поток будет заблокирован и не сможет продолжить работу, пока V не будет снова разблокирован. Это гарантирует корректное выполнение программы. Блокировки могут быть необходимы для обеспечения корректного выполнения программы, когда потоки должны сериализовать доступ к ресурсам, но их использование может сильно замедлить работу программы и повлиять на ее надежность . [21]
Блокировка нескольких переменных с помощью неатомарных блокировок приводит к возможности тупиковой ситуации в программе . Атомная блокировка блокирует несколько переменных одновременно. Если он не может заблокировать их все, он не блокирует ни один из них. Если каждому из двух потоков необходимо заблокировать одни и те же две переменные с использованием неатомарных блокировок, возможно, что один поток заблокирует одну из них, а второй поток заблокирует вторую переменную. В таком случае ни один поток не может завершиться, и возникает взаимоблокировка. [22]
Многие параллельные программы требуют, чтобы их подзадачи выполнялись синхронно . Это требует использования барьера . Барьеры обычно реализуются с помощью блокировки или семафора . [23] Один класс алгоритмов, известный как алгоритмы без блокировок и без ожидания , вообще избегает использования блокировок и барьеров. Однако этот подход, как правило, сложен в реализации и требует правильно спроектированных структур данных. [24]
Не всякое распараллеливание приводит к ускорению. Как правило, поскольку задача разбивается на все больше и больше потоков, эти потоки тратят все большую часть своего времени на общение друг с другом или ожидание друг друга для доступа к ресурсам. [25] [26] Как только накладные расходы из-за конкуренции за ресурсы или связи преобладают над временем, затрачиваемым на другие вычисления, дальнейшее распараллеливание (то есть разделение рабочей нагрузки на еще большее количество потоков) увеличивает, а не уменьшает количество времени, необходимое для завершения. Эта проблема, известная как параллельное замедление , [27] в некоторых случаях можно улучшить путем анализа и перепроектирования программного обеспечения. [28]
, крупнозернистый и параллелизм смущающий Мелкозернистый
Приложения часто классифицируются в зависимости от того, как часто их подзадачам необходимо синхронизироваться или взаимодействовать друг с другом. Приложение демонстрирует детальный параллелизм, если его подзадачи должны обмениваться данными много раз в секунду; он демонстрирует грубый параллелизм, если они не обмениваются данными много раз в секунду, и демонстрирует смущающий параллелизм, если им редко или никогда не приходится общаться. Невероятно параллельные приложения считаются самыми простыми для распараллеливания.
Таксономия Флинна [ править ]
Майкл Дж. Флинн создал одну из самых ранних систем классификации параллельных (и последовательных) компьютеров и программ, теперь известную как таксономия Флинна . Флинн классифицировал программы и компьютеры по тому, работали ли они с использованием одного или нескольких наборов инструкций, а также по тому, использовали ли эти инструкции один или несколько наборов данных.
Таксономия Флинна |
---|
Единый поток данных |
Несколько потоков данных |
SIMD-подкатегории [29] |
См. также |
Классификация «одна инструкция — одни данные» (SISD) эквивалентна полностью последовательной программе. Классификация «одна инструкция — несколько данных» (SIMD) аналогична многократному выполнению одной и той же операции над большим набором данных. Обычно это делается в обработки сигналов приложениях . Классификация «множественные инструкции — одни данные» (MISD) — редко используемая классификация. Хотя были разработаны компьютерные архитектуры для решения этой проблемы (например, систолические массивы ), материализовалось лишь несколько приложений, соответствующих этому классу. Программы с несколькими инструкциями и несколькими данными (MIMD) на сегодняшний день являются наиболее распространенным типом параллельных программ.
По словам Дэвида А. Паттерсона и Джона Л. Хеннесси : «Некоторые машины, конечно, представляют собой гибриды этих категорий, но эта классическая модель выжила, потому что она проста, ее легко понять и дает хорошее первое приближение. возможно, из-за ее понятности — наиболее широко используемой схемы». [30]
Детализация [ править ]
Параллелизм на уровне битов [ править ]
С момента появления в 1970-х годах технологии производства компьютерных чипов сверхкрупной интеграции (СБИС) и примерно до 1986 года ускорение компьютерной архитектуры было обусловлено удвоением размера компьютерного слова — количества информации, которой процессор может манипулировать за цикл. [31] Увеличение размера слова уменьшает количество инструкций, которые процессор должен выполнить для выполнения операции над переменными, размеры которых превышают длину слова. Например, если 8-битный процессор должен сложить два 16-битных целых числа , процессор должен сначала сложить 8 младших битов каждого целого числа, используя стандартную инструкцию сложения, а затем сложить 8 старших битов, используя команду сложения. - инструкция переноса и бит переноса из сложения младшего порядка; таким образом, 8-битному процессору для выполнения одной операции требуются две инструкции, тогда как 16-битный процессор сможет выполнить операцию с помощью одной инструкции.
Исторически 4-битные микропроцессоры были заменены 8-битными, затем 16-битными, а затем 32-битными микропроцессорами. Эта тенденция в целом закончилась с появлением 32-битных процессоров, которые на протяжении двух десятилетий были стандартом в вычислениях общего назначения. Лишь в начале 2000-х годов, с появлением архитектур x86-64 , 64-битные процессоры стали обычным явлением.
Параллелизм на уровне инструкций [ править ]
Компьютерная программа, по сути, представляет собой поток инструкций, выполняемых процессором. Без параллелизма на уровне команд процессор может выдавать только менее одной инструкции за такт ( IPC < 1 ). Эти процессоры известны как субскалярные процессоры. Эти инструкции можно переупорядочивать и объединять в группы, которые затем выполняются параллельно без изменения результата программы. Это известно как параллелизм на уровне команд. Достижения в области параллелизма на уровне команд доминировали в компьютерной архитектуре с середины 1980-х до середины 1990-х годов. [32]
Все современные процессоры имеют многоступенчатые конвейеры команд . Каждый этап конвейера соответствует отдельному действию, которое процессор выполняет над этой инструкцией на этом этапе; процессор с N -этапным конвейером может иметь до N различных инструкций на разных стадиях завершения и, таким образом, может выдавать одну инструкцию за такт ( IPC = 1 ). Эти процессоры известны как скалярные процессоры. Каноническим примером конвейерного процессора является RISC- процессор с пятью этапами: выборка инструкций (IF), декодирование инструкций (ID), выполнение (EX), доступ к памяти (MEM) и обратная запись в регистр (WB). Процессор Pentium 4 имел 35-ступенчатый конвейер. [33]
Большинство современных процессоров также имеют несколько исполнительных блоков . Обычно они сочетают эту функцию с конвейерной обработкой и, таким образом, могут выдавать более одной инструкции за такт ( IPC > 1 ). Эти процессоры известны как суперскалярные процессоры. Суперскалярные процессоры отличаются от многоядерных процессоров тем, что несколько исполнительных блоков не являются целыми процессорами (т.е. процессорными блоками). нет зависимости данных Инструкции можно группировать вместе только в том случае, если между ними . Табло и алгоритм Томасуло (который похож на табло, но использует переименование регистров ) — два наиболее распространенных метода реализации внеочередного выполнения и параллелизма на уровне инструкций.
Параллелизм задач [ править ]
Параллелизм задач — это характеристика параллельной программы, заключающаяся в том, что «совершенно разные вычисления могут выполняться как с одними и теми же, так и с разными наборами данных». [34] Это контрастирует с параллелизмом данных, когда одни и те же вычисления выполняются с одним и тем же или разными наборами данных. Параллелизм задач предполагает разложение задачи на подзадачи и последующее выделение каждой подзадачи процессору для выполнения. Затем процессоры будут выполнять эти подзадачи одновременно и часто совместно. Параллелизм задач обычно не зависит от размера проблемы. [35]
Параллелизм на уровне суперслов [ править ]
Параллелизм на уровне суперслов — это метод векторизации, основанный на развертывании цикла и базовой векторизации блоков. Он отличается от алгоритмов векторизации цикла тем, что может использовать параллелизм встроенного кода , например, при манипулировании координатами, цветовыми каналами или в циклах, развернутых вручную. [36]
Аппаратное обеспечение [ править ]
Память и общение [ править ]
Основная память в параллельном компьютере представляет собой либо разделяемую память (совместно используемую всеми обрабатывающими элементами в одном адресном пространстве ), либо распределенную память (в которой каждый обрабатывающий элемент имеет собственное локальное адресное пространство). [37] Распределенная память означает тот факт, что память распределена логически, но часто подразумевается, что она также распределена физически. Распределенная общая память и виртуализация памяти объединяют два подхода, при которых обрабатывающий элемент имеет собственную локальную память и доступ к памяти на нелокальных процессорах. Доступ к локальной памяти обычно происходит быстрее, чем доступ к нелокальной памяти. На суперкомпьютерах распределенное общее пространство памяти может быть реализовано с использованием модели программирования, такой как PGAS . Эта модель позволяет процессам на одном вычислительном узле прозрачно получать доступ к удаленной памяти другого вычислительного узла. Все вычислительные узлы также подключены к внешней системе с общей памятью через высокоскоростное соединение, такое как Infiniband . Эта внешняя система с общей памятью известна как пакетный буфер , который обычно создается из массивов энергонезависимой памяти, физически распределенных по нескольким устройствам ввода/вывода. О узлы.
Компьютерные архитектуры, в которых к каждому элементу основной памяти можно получить доступ с одинаковой задержкой и пропускной способностью , известны как унифицированного доступа к памяти системы (UMA). Обычно этого можно достичь только с помощью системы с общей памятью , в которой память физически не распределена. Система, не обладающая этим свойством, называется архитектурой неоднородного доступа к памяти (NUMA). Системы с распределенной памятью имеют неравномерный доступ к памяти.
Компьютерные системы используют кэши — небольшие и быстрые запоминающие устройства, расположенные рядом с процессором, в которых хранятся временные копии значений памяти (поблизости как в физическом, так и в логическом смысле). В параллельных компьютерных системах возникают трудности с кэшами, которые могут хранить одно и то же значение в нескольких местах, что может привести к неправильному выполнению программы. Этим компьютерам требуется система согласованности кэша , которая отслеживает кэшированные значения и стратегически очищает их, обеспечивая тем самым правильное выполнение программы. Отслеживание шины — один из наиболее распространенных методов отслеживания того, к каким значениям осуществляется доступ (и, следовательно, их следует очищать). Проектирование больших, высокопроизводительных систем когерентности кэша — очень сложная проблема в компьютерной архитектуре. В результате компьютерные архитектуры с общей памятью не масштабируются так хорошо, как системы с распределенной памятью. [37]
Связь процессор-процессор и процессор-память может быть реализована аппаратно несколькими способами, в том числе через общую (многопортовую или мультиплексированную ) память, перекрестный коммутатор , общую шину или сеть межсоединений с множеством топологий , включая звезду , кольцо , дерево. , гиперкуб , толстый гиперкуб (гиперкуб с более чем одним процессором в узле) или n-мерная сетка .
Параллельные компьютеры, основанные на взаимосвязанных сетях, должны иметь некоторую маршрутизацию , позволяющую передавать сообщения между узлами, которые не связаны напрямую. В больших многопроцессорных машинах среда, используемая для связи между процессорами, скорее всего, будет иерархической.
Классы параллельных компьютеров [ править ]
Параллельные компьютеры можно грубо классифицировать по уровню, на котором оборудование поддерживает параллелизм. Эта классификация во многом аналогична расстоянию между базовыми вычислительными узлами. Они не являются взаимоисключающими; например, относительно распространены кластеры симметричных мультипроцессоров.
Многоядерные вычисления [ править ]
Многоядерный процессор — это процессор, который включает в себя несколько процессоров (называемых «ядрами») на одном кристалле. Этот процессор отличается от суперскалярного процессора, который включает в себя несколько исполнительных блоков и может выдавать несколько инструкций за такт из одного потока команд (потока); напротив, многоядерный процессор может выдавать несколько инструкций за такт из нескольких потоков команд. IBM Микропроцессор Cell , разработанный для использования в Sony PlayStation 3 , является выдающимся многоядерным процессором. Каждое ядро многоядерного процессора потенциально также может быть суперскалярным, то есть за каждый такт каждое ядро может выдавать несколько инструкций из одного потока.
Одновременная многопоточность (из которой наиболее известна технология Intel Hyper-Threading ) была ранней формой псевдомногоядерности. Процессор, поддерживающий параллельную многопоточность, включает в себя несколько исполнительных блоков в одном процессоре (то есть он имеет суперскалярную архитектуру) и может выдавать несколько инструкций за такт из нескольких потоков. С другой стороны, временная многопоточность включает в себя один исполнительный блок в одном и том же процессоре и может выдавать по одной инструкции одновременно из нескольких потоков.
Симметричная многопроцессорность [ править ]
Симметричный мультипроцессор (SMP) — это компьютерная система с несколькими идентичными процессорами, которые совместно используют память и подключаются через шину . [38] Конфликты на шинах препятствуют масштабированию шинных архитектур. В результате SMP обычно не содержат более 32 процессоров. [39] Из-за небольшого размера процессоров и значительного снижения требований к пропускной способности шины, достигаемого за счет больших кэшей, такие симметричные мультипроцессоры чрезвычайно эффективны с точки зрения затрат при условии наличия достаточного объема пропускной способности памяти. [38]
Распределенные вычисления [ править ]
Распределенный компьютер (также известный как мультипроцессор с распределенной памятью) — это компьютерная система с распределенной памятью, в которой элементы обработки соединены сетью. Распределенные компьютеры обладают высокой масштабируемостью. Термины « параллельные вычисления », «параллельные вычисления» и «распределенные вычисления» во многом совпадают, и между ними не существует четкого различия. [40] Одну и ту же систему можно охарактеризовать как «параллельную», так и «распределенную»; процессоры в типичной распределенной системе работают одновременно и параллельно. [41]
Кластерные вычисления [ править ]
Кластер — это группа слабо связанных компьютеров, которые тесно взаимодействуют друг с другом, поэтому в некоторых отношениях их можно рассматривать как один компьютер. [42] Кластеры состоят из нескольких автономных компьютеров, соединенных сетью. Хотя машины в кластере не обязательно должны быть симметричными, балансировка нагрузки в противном случае будет сложнее. Наиболее распространенным типом кластера является кластер «Беовульф» , который представляет собой кластер, реализованный на нескольких идентичных коммерческих готовых компьютерах, подключенных к TCP/IP Ethernet локальной сети . [43] Технология Беовульфа была первоначально разработана Томасом Стерлингом и Дональдом Беккером . 87% всех суперкомпьютеров Top500 являются кластерами. [44] Остальные — это процессоры с массовым параллелизмом, описание которых приведено ниже.
Поскольку системы грид-вычислений (описанные ниже) могут легко решать сложные параллельные задачи, современные кластеры обычно предназначены для решения более сложных задач — проблем, которые требуют, чтобы узлы чаще обменивались промежуточными результатами друг с другом. Для этого требуется высокая пропускная способность и, что более важно, сеть межсоединений с малой задержкой . Многие исторические и современные суперкомпьютеры используют специализированное высокопроизводительное сетевое оборудование, специально разработанное для кластерных вычислений, например сеть Cray Gemini. [45] По состоянию на 2014 год в большинстве современных суперкомпьютеров используется стандартное сетевое оборудование, часто Myrinet , InfiniBand или Gigabit Ethernet .
Массивно-параллельные вычисления [ править ]
Процессор с массивным параллелизмом (MPP) — это один компьютер с множеством сетевых процессоров. MPP имеют многие из тех же характеристик, что и кластеры, но MPP имеют специализированные межсетевые сети (тогда как кластеры используют обычное оборудование для создания сетей). MPP также обычно больше кластеров и обычно имеют «намного больше», чем 100 процессоров. [46] В MPP «каждый процессор содержит собственную память и копию операционной системы и приложений. Каждая подсистема взаимодействует с другими через высокоскоростное соединение». [47]
IBM за Blue Gene/L , пятый по скорости суперкомпьютер в мире согласно рейтингу TOP500 июнь 2009 года , является MPP.
Грид-вычисления [ править ]
Грид-вычисления — это наиболее распределенная форма параллельных вычислений. Он использует компьютеры, обменивающиеся данными через Интернет, для решения конкретной проблемы. Из-за низкой пропускной способности и чрезвычайно высоких задержек, доступных в Интернете, распределенные вычисления обычно имеют дело только с досадно параллельными задачами.
Большинство приложений грид-вычислений используют промежуточное программное обеспечение (программное обеспечение, которое находится между операционной системой и приложением для управления сетевыми ресурсами и стандартизации программного интерфейса). Наиболее распространенным промежуточным программным обеспечением для грид-вычислений является открытая инфраструктура для сетевых вычислений Беркли (BOINC). Часто добровольное вычислительное программное обеспечение использует «запасные циклы», выполняя вычисления в то время, когда компьютер простаивает. [48]
Облачные вычисления [ править ]
Повсеместное распространение Интернета открыло возможность крупномасштабных облачных вычислений.
Специализированные параллельные компьютеры [ править ]
В рамках параллельных вычислений существуют специализированные параллельные устройства, которые остаются нишевыми областями интересов. Хотя они и не зависят от предметной области , они, как правило, применимы лишь к нескольким классам параллельных задач.
с программируемыми вентильными Реконфигурируемые матрицами вычисления
Реконфигурируемые вычисления — это использование программируемой вентильной матрицы (FPGA) в качестве сопроцессора компьютера общего назначения. По сути, FPGA — это компьютерный чип, который может перепрограммироваться для решения конкретной задачи.
FPGA можно программировать с использованием языков описания оборудования, таких как VHDL. [49] или Верилог . [50] Несколько поставщиков создали языки C to HDL , которые пытаются эмулировать синтаксис и семантику языка программирования C , с которым знакомо большинство программистов. Наиболее известные языки от C до HDL — Mitrion-C , Impulse C и Handel-C . определенные подмножества SystemC Для этой цели также можно использовать , основанные на C++.
Решение AMD открыть свою технологию HyperTransport для сторонних поставщиков стало технологией, позволяющей создавать высокопроизводительные реконфигурируемые вычисления. [51] По словам Майкла Р. Д'Амура, главного операционного директора DRC Computer Corporation, «когда мы впервые пришли в AMD, нас назвали « похитителями сокетов ». Теперь они называют нас своими партнерами». [51]
Вычисления общего назначения на графических процессорах (GPGPU) [ править ]
Вычисления общего назначения на графических процессорах (GPGPU) — довольно недавнее направление в исследованиях в области компьютерной техники. Графические процессоры — это сопроцессоры, которые были сильно оптимизированы для обработки компьютерной графики . [52] Обработка компьютерной графики — это область, в которой доминируют параллельные операции с данными, особенно линейной алгебры матричные операции .
Вначале программы GPGPU использовали обычные графические API для выполнения программ. Однако было создано несколько новых языков программирования и платформ для выполнения вычислений общего назначения на графических процессорах, причем как Nvidia , так и AMD выпустили среды программирования с CUDA и Stream SDK соответственно. Другие языки программирования графических процессоров включают BrookGPU , PeakStream и RapidMind . Nvidia также выпустила специальные продукты для вычислений в своей серии Tesla . Технологический консорциум Khronos Group выпустил спецификацию OpenCL , которая представляет собой основу для написания программ, которые выполняются на платформах, состоящих из центральных и графических процессоров. AMD , Apple , Intel , Nvidia и другие поддерживают OpenCL .
Интегральные схемы специального назначения [ править ]
несколько подходов к интегральным схемам для конкретных приложений (ASIC). Для работы с параллельными приложениями было разработано [53] [54] [55]
Поскольку ASIC (по определению) специфичен для конкретного приложения, его можно полностью оптимизировать для этого приложения. В результате для данного приложения ASIC имеет тенденцию превосходить компьютер общего назначения. Однако ASIC создаются с помощью УФ-фотолитографии . Для этого процесса требуется набор масок, который может быть чрезвычайно дорогим. Набор масок может стоить более миллиона долларов США. [56] (Чем меньше транзисторов требуется для чипа, тем дороже будет маска.) Между тем, рост производительности в вычислениях общего назначения с течением времени (как описано законом Мура ) имеет тенденцию сводить на нет этот выигрыш всего за одно или два поколения чипов. . [51] Высокая первоначальная стоимость и тенденция к вытеснению универсальных вычислений, основанных на законе Мура, сделали ASIC непригодными для большинства приложений параллельных вычислений. Однако некоторые из них были построены. Одним из примеров является машина PFLOPS RIKEN MDGRAPE-3 , в которой используются специальные ASIC для моделирования молекулярной динамики .
Векторные процессоры [ править ]
Векторный процессор — это ЦП или компьютерная система, которая может выполнять одну и ту же инструкцию для больших наборов данных. Векторные процессоры имеют операции высокого уровня, которые работают с линейными массивами чисел или векторов. Пример векторной операции: A = B × C , где A , B и C — каждый из 64-элементных векторов 64-битных чисел с плавающей запятой . [57] Они тесно связаны с классификацией SIMD Флинна. [57]
Компьютеры Cray прославились своими компьютерами векторной обработки в 1970-х и 1980-х годах. Однако векторные процессоры — как центральные процессоры, так и полноценные компьютерные системы — в целом исчезли. Современные наборы инструкций процессора включают в себя некоторые инструкции векторной обработки, например, Freescale Semiconductor от AltiVec и Intel (SSE) от Streaming SIMD Extensions .
Программное обеспечение [ править ]
Языки параллельного программирования [ править ]
языки параллельного программирования , библиотеки , API и модели параллельного программирования (например, алгоритмические скелеты Для программирования параллельных компьютеров были созданы ). Обычно их можно разделить на классы на основе предположений, которые они делают о базовой архитектуре памяти — разделяемая память, распределенная память или совместно используемая распределенная память. Языки программирования с общей памятью взаимодействуют посредством манипулирования переменными общей памяти. Распределенная память использует передачу сообщений . POSIX Threads и OpenMP — два наиболее широко используемых API общей памяти, тогда как интерфейс передачи сообщений (MPI) — наиболее широко используемый системный API передачи сообщений. [58] Одной из концепций, используемых при программировании параллельных программ, является концепция будущего , согласно которой одна часть программы обещает передать необходимые данные другой части программы в какой-то момент в будущем.
Усилия по стандартизации параллельного программирования включают открытый стандарт OpenHMPP для гибридного многоядерного параллельного программирования. Модель программирования на основе директив OpenHMPP предлагает синтаксис для эффективной разгрузки вычислений на аппаратных ускорителях и оптимизации перемещения данных в/из аппаратной памяти с помощью удаленных вызовов процедур .
Рост потребительских графических процессоров привел к поддержке вычислительных ядер либо в графических API (называемых вычислительными шейдерами ), либо в специализированных API (таких как OpenCL ), либо в других языковых расширениях.
Автоматическое распараллеливание [ править ]
Автоматическое распараллеливание последовательной программы компилятором является «Святым Граалем» параллельных вычислений, особенно с вышеупомянутым ограничением частоты процессора. Несмотря на десятилетия работы исследователей компиляторов, автоматическое распараллеливание имело лишь ограниченный успех. [59]
Основные языки параллельного программирования остаются либо явно параллельными, либо (в лучшем случае) частично неявными , в которых программист дает компилятору директивы для распараллеливания. Существует несколько полностью неявных языков параллельного программирования — SISAL , Parallel Haskell , SequenceL , System C (для FPGA ), Mitrion-C , VHDL и Verilog .
Контрольная точка приложения [ править ]
По мере усложнения компьютерной системы среднее время наработки на отказ обычно уменьшается. Контрольная точка приложения — это метод, при котором компьютерная система делает «снимок» приложения — запись всех текущих распределений ресурсов и состояний переменных, что похоже на дамп ядра —; эту информацию можно использовать для восстановления программы в случае сбоя компьютера. Контрольная точка приложения означает, что программа должна перезапуститься только с последней контрольной точки, а не с начала. Хотя контрольные точки дают преимущества в различных ситуациях, они особенно полезны в высокопараллельных системах с большим количеством процессоров, используемых в высокопроизводительных вычислениях . [60]
Алгоритмические методы [ править ]
Поскольку параллельные компьютеры становятся больше и быстрее, мы теперь можем решать проблемы, решение которых раньше занимало слишком много времени. Такие разнообразные области, как биоинформатика ( сворачивание белков и анализ последовательностей ) и экономика, воспользовались преимуществами параллельных вычислений. Общие типы проблем в приложениях параллельных вычислений включают в себя: [61]
- Плотная линейная алгебра
- Разреженная линейная алгебра
- Спектральные методы (такие как быстрое преобразование Фурье Кули – Тьюки )
- N Задачи тел (например, моделирование Барнса – Хата )
- Задачи структурированной сетки (например, решеточные методы Больцмана )
- Проблемы с неструктурированной сеткой (например, возникающие при анализе методом конечных элементов )
- Метод Монте-Карло
- Комбинационная логика (например, криптографические методы грубой силы )
- Обход графа (например, алгоритмы сортировки )
- Динамическое программирование
- ветвей и границ Методы
- Графические модели (например, обнаружение скрытых марковских моделей и построение байесовских сетей )
- Модель HBJ — краткая модель передачи сообщений. [62]
- конечного автомата Моделирование
Отказоустойчивость [ править ]
Параллельные вычисления также могут применяться для проектирования отказоустойчивых компьютерных систем , особенно с помощью синхронных систем, выполняющих одну и ту же операцию параллельно. Это обеспечивает резервирование в случае выхода из строя одного компонента, а также позволяет автоматически обнаруживать и исправлять ошибки, если результаты отличаются. Эти методы можно использовать для предотвращения единичных сбоев, вызванных временными ошибками. [63] Хотя во встроенных или специализированных системах могут потребоваться дополнительные меры, этот метод может обеспечить экономически эффективный подход для достижения n-модульной избыточности в коммерческих готовых системах.
История [ править ]
Истоки истинного (MIMD) параллелизма восходят к Луиджи Федерико Менабреа и его «Очерку аналитической машины, изобретенной Чарльзом Бэббиджем» . [65] [66] [67]
В 1957 году компания Compagnie des Machines Bull анонсировала первую компьютерную архитектуру, специально разработанную для параллелизма, — Gamma 60 . [68] Он использовал модель разветвления-объединения и «распределитель программ» для отправки и сбора данных в независимые процессоры, подключенные к центральной памяти, и обратно. [69] [70]
В апреле 1958 года Стэнли Гилл (Ферранти) обсуждал параллельное программирование и необходимость ветвления и ожидания. [71] Также в 1958 году исследователи IBM Джон Кок и Дэниел Слотник впервые обсудили использование параллелизма в числовых вычислениях. [72] Корпорация Burroughs представила в 1962 году D825, четырехпроцессорный компьютер, который имел доступ к 16 модулям памяти через перекрестный переключатель . [73] В 1967 году Амдал и Слотник опубликовали дискуссию о возможности параллельной обработки на конференции Американской федерации обществ обработки информации. [72] Именно во время этих дебатов был придуман закон Амдала, определяющий предел ускорения за счет параллелизма.
В 1969 году компания Honeywell представила свою первую систему Multics — симметричную многопроцессорную систему, способную параллельно использовать до восьми процессоров. [72] C.mmp , многопроцессорный проект Университета Карнеги-Меллон в 1970-х годах, был одним из первых мультипроцессоров с несколькими процессорами. Первым мультипроцессором с отслеживающим кэшем, подключенным к шине, стал Synapse N+1, выпущенный в 1984 году. [66]
История параллельных компьютеров SIMD восходит к 1970-м годам. Основанием для создания первых SIMD-компьютеров была попытка амортизировать задержку вентиля процессора блока управления при выполнении нескольких инструкций. [74] В 1964 году Слотник предложил построить компьютер с массовым параллелизмом для Ливерморской национальной лаборатории имени Лоуренса . [72] Его разработка была профинансирована ВВС США , которые были самой ранней разработкой параллельных вычислений SIMD, ILLIAC IV . [72] Ключом к ее конструкции был довольно высокий уровень параллелизма (до 256 процессоров), что позволяло машине работать с большими наборами данных, что позже будет известно как векторная обработка . Однако ILLIAC IV называли «самым печально известным из суперкомпьютеров», поскольку проект был завершен лишь на четверть, но занял 11 лет и стоил почти в четыре раза дороже первоначальной оценки. [64] Когда в 1976 году он наконец был готов к запуску своего первого реального приложения, он уступил по производительности существующим коммерческим суперкомпьютерам, таким как Cray-1 .
мозг как массивно- компьютер параллельный Биологический
В начале 1970-х годов в Лаборатории компьютерных наук и искусственного интеллекта Массачусетского технологического института Марвин Мински и Сеймур Пейперт начали разрабатывать теорию Общества разума , которая рассматривает биологический мозг как массово-параллельный компьютер . В 1986 году Мински опубликовал «Общество разума» , в котором утверждается, что «разум формируется из множества маленьких агентов, каждый из которых сам по себе бессмыслен». [75] Теория пытается объяснить, как то, что мы называем интеллектом, может быть продуктом взаимодействия неразумных частей. Мински говорит, что самый большой источник идей по поводу теории пришел из его работы по созданию машины, которая использует роботизированную руку, видеокамеру и компьютер для сборки из детских кубиков. [76]
Подобные модели (которые также рассматривают биологический мозг как массивно-параллельный компьютер, т. е. мозг состоит из созвездия независимых или полунезависимых агентов) также были описаны:
- Томас Р. Блейксли, [77]
- Майкл С. Газзанига , [78] [79]
- Роберт Э. Орнштейн , [80]
- Эрнест Хилгард , [81] [82]
- Мичио Каку , [83]
- George Ivanovich Gurdjieff , [84]
- Нейрокластерная модель мозга. [85]
См. также [ править ]
- Многозадачность компьютера
- Параллелизм (информатика)
- Параллельный процессор с адресацией по содержимому
- Список конференций по распределенным вычислениям
- Параллелизм на уровне цикла
- Манчестерская машина потока данных
- многокор
- Модель параллельного программирования
- Контракт на распараллеливание
- Сериализуемость
- Синхронное программирование
- Транспьютер
- Векторная обработка
Ссылки [ править ]
- ^ Готлиб, Аллан; Алмаси, Джордж С. (1989). Высокопараллельные вычисления . Редвуд-Сити, Калифорния: Бенджамин/Каммингс. ISBN 978-0-8053-0177-9 .
- ^ С.В. Адве и др. (ноябрь 2008 г.). «Исследования в области параллельных вычислений в Иллинойсе: программа UPCRC». Архивировано 11 января 2018 г. в Wayback Machine (PDF). Parallel@Illinois, Университет Иллинойса в Урбана-Шампейн. «Основные методы достижения этих преимуществ в производительности — увеличение тактовой частоты и более умные, но все более сложные архитектуры — сейчас наталкиваются на так называемую стену мощности. Компьютерная индустрия согласилась с тем, что будущий рост производительности должен в значительной степени происходить за счет увеличения количества процессоров (или ядер). ) на кристалле, а не заставлять одно ядро работать быстрее».
- ^ Асанович и др. Старое [традиционное мнение]: Электроэнергия бесплатна, но транзисторы дороги. Новое [традиционное мнение] заключается в том, что энергия стоит дорого, но транзисторы «бесплатны».
- ^ Асанович, Крсте и др. (18 декабря 2006 г.). «Пейзаж исследований в области параллельных вычислений: взгляд из Беркли» (PDF) . Калифорнийский университет, Беркли. Технический отчет № UCB/EECS-2006-183. «Старое [традиционное мнение]: увеличение тактовой частоты является основным методом улучшения производительности процессора. Новое [традиционное мнение]: увеличение параллелизма является основным методом улучшения производительности процессора… Даже представители Intel, компании, которая обычно ассоциируется с «более высокой тактовой частотой» «Скорость лучше» предупредил, что традиционные подходы к максимизации производительности за счет увеличения тактовой частоты доведены до предела».
- ^ Параллельное и параллельное программирование на Haskell . О'Рейли Медиа. 2013. ISBN 9781449335922 .
- ^ Хеннесси, Джон Л .; Паттерсон, Дэвид А .; Ларус, Джеймс Р. (1999). Компьютерная организация и проектирование: аппаратно-программный интерфейс (2-е изд., 3-е печат. изд.). Сан-Франциско: Кауфманн. ISBN 978-1-55860-428-5 .
- ↑ Перейти обратно: Перейти обратно: а б Барни, Блейз. «Введение в параллельные вычисления» . Ливерморская национальная лаборатория Лоуренса . Проверено 9 ноября 2007 г.
- ^ Томас Раубер; Гудула Рюнгер (2013). Параллельное программирование: для многоядерных и кластерных систем . Springer Science & Business Media. п. 1. ISBN 9783642378010 .
- ^ Хеннесси, Джон Л.; Паттерсон, Дэвид А. (2002). Архитектура компьютера / Количественный подход (3-е изд.). Сан-Франциско, Калифорния: International Thomson. п. 43. ИСБН 978-1-55860-724-8 .
- ^ Рабай, Ян М. (1996). Цифровые интегральные схемы: взгляд на проектирование . Река Аппер-Сэддл, Нью-Джерси: Прентис-Холл. п. 235. ИСБН 978-0-13-178609-7 .
- ^ Флинн, Лори Дж. (8 мая 2004 г.). «Intel прекращает разработку двух новых микропроцессоров» . Нью-Йорк Таймс . Проверено 5 июня 2012 г.
- ^ Томас Раубер; Гудула Рюнгер (2013). Параллельное программирование: для многоядерных и кластерных систем . Springer Science & Business Media. п. 2. ISBN 9783642378010 .
- ^ Томас Раубер; Гудула Рюнгер (2013). Параллельное программирование: для многоядерных и кластерных систем . Springer Science & Business Media. п. 3. ISBN 9783642378010 .
- ^ Амдал, Джин М. (1967). «Действительность однопроцессорного подхода для достижения крупномасштабных вычислительных возможностей» . Материалы весенней совместной компьютерной конференции AFIPS '67 (Весна), состоявшейся 18–20 апреля 1967 г. стр. 483–485. дои : 10.1145/1465482.1465560 . ISBN 9780805301779 . S2CID 195607370 .
- ^ Брукс, Фредерик П. (1996). Очерки мифического человеко-месяца по разработке программного обеспечения (Юбилейное изд., переп. с корр., 5. [Др.] изд.). Ридинг, Массачусетс [ua]: Аддисон-Уэсли. ISBN 978-0-201-83595-3 .
- ^ Майкл МакКул; Джеймс Рейндерс; Арч Робисон (2013). Структурированное параллельное программирование: шаблоны для эффективных вычислений . Эльзевир. п. 61.
- ^ Густафсон, Джон Л. (май 1988 г.). «Переоценка закона Амдала» . Коммуникации АКМ . 31 (5): 532–533. CiteSeerX 10.1.1.509.6892 . дои : 10.1145/42411.42415 . S2CID 33937392 . Архивировано из оригинала 27 сентября 2007 г.
- ^ Бернштейн, AJ (1 октября 1966 г.). «Анализ программ для параллельной обработки». Транзакции IEEE на электронных компьютерах . ЕС-15 (5): 757–763. дои : 10.1109/PGEC.1966.264565 .
- ^ Рооста, Сейед Х. (2000). Параллельная обработка и параллельные алгоритмы: теория и вычисления . Нью-Йорк, штат Нью-Йорк [ua]: Springer. п. 114. ИСБН 978-0-387-98716-3 .
- ^ «Процессы и потоки» . Сеть разработчиков Microsoft . Корпорация Майкрософт, 2018 год . Проверено 10 мая 2018 г.
- ^ Краусс, Кирк Дж (2018). «Потокобезопасность для производительности» . Развивайтесь ради производительности . Архивировано из оригинала 13 мая 2018 г. Проверено 10 мая 2018 г.
- ^ Таненбаум, Эндрю С. (1 февраля 2002 г.). Введение в взаимоблокировки операционной системы . Pearson Education, Информит . Проверено 10 мая 2018 г.
{{cite book}}
:|website=
игнорируется ( помогите ) - ^ Сесил, Дэвид (3 ноября 2015 г.). «Внутренности синхронизации – семафор» . Встроенный . АспенКор . Проверено 10 мая 2018 г.
- ^ Прешинг, Джефф (8 июня 2012 г.). «Введение в программирование без блокировки» . Прешинг по программированию . Проверено 10 мая 2018 г.
- ^ «Что является противоположностью слову «позорная параллель»?» . StackOverflow . Проверено 10 мая 2018 г.
- ^ Шварц, Дэвид (15 августа 2011 г.). «Что такое конфликт потоков?» . StackOverflow . Проверено 10 мая 2018 г.
- ^ Куканов, Алексей (04 марта 2008 г.). «Почему простой тест может привести к параллельному замедлению» . Проверено 15 февраля 2015 г.
- ^ Краусс, Кирк Дж (2018). «Поточность для повышения производительности» . Развивайтесь ради производительности . Архивировано из оригинала 13 мая 2018 г. Проверено 10 мая 2018 г.
- ^ Флинн, Майкл Дж. (сентябрь 1972 г.). «Некоторые компьютерные организации и их эффективность» (PDF) . Транзакции IEEE на компьютерах . С-21 (9): 948–960. дои : 10.1109/TC.1972.5009071 .
- ^ Паттерсон и Хеннесси, с. 748.
- ^ Сингх, Дэвид Каллер; Дж. П. (1997). Параллельная компьютерная архитектура (изд. [Начдр.]). Сан-Франциско: Morgan Kaufmann Publ. 15. ISBN 978-1-55860-343-1 .
{{cite book}}
: CS1 maint: несколько имен: список авторов ( ссылка ) - ^ Каллер и др. п. 15.
- ^ Патт, Йельский университет (апрель 2004 г.). « Микропроцессор через десять лет: каковы проблемы, как мы их решаем? Архивировано 14 апреля 2008 г. в Wayback Machine (wmv). Выступление выдающегося лектора в Университете Карнеги-Меллона . Проверено 7 ноября 2007 г.
- ^ Каллер и др. п. 124.
- ^ Каллер и др. п. 125.
- ^ Сэмюэл Ларсен; Саман Амарасингхе. «Использование параллелизма на уровне суперслов с наборами мультимедийных инструкций» (PDF) .
- ↑ Перейти обратно: Перейти обратно: а б Паттерсон и Хеннесси, с. 713.
- ↑ Перейти обратно: Перейти обратно: а б Хеннесси и Паттерсон, с. 549.
- ^ Паттерсон и Хеннесси, с. 714.
- ^ Гош (2007) , с. 10. Кейдар (2008) .
- ^ Линч (1996) , с. XIX, 1–2. Пелег (2000) , с. 1.
- ^ Что такое кластеризация? Компьютерный словарь Webopedia. Проверено 7 ноября 2007 г.
- ^ Определение Беовульфа. Архивировано 10 октября 2012 г. в журнале Wayback Machine PC Magazine . Проверено 7 ноября 2007 г.
- ^ «Список статистики | ТОП500 суперкомпьютерных сайтов» . www.top500.org . Проверено 05 августа 2018 г.
- ^ «Interconnect» . Архивировано 28 января 2015 г. в Wayback Machine .
- ^ Хеннесси и Паттерсон, с. 537.
- ^ Определение MPP. Архивировано 11 мая 2013 г. в журнале Wayback Machine PC Magazine . Проверено 7 ноября 2007 г.
- ^ Киркпатрик, Скотт (2003). «КОМПЬЮТЕРНАЯ НАУКА: впереди трудные времена». Наука . 299 (5607): 668–669. дои : 10.1126/science.1081623 . ПМИД 12560537 . S2CID 60622095 .
- ^ Валуева, Мария; Валуев Георгий; Семенова, Наталья; Ляхов, Павел; Червяков, Николай; Каплун Дмитрий; Богаевский Данил (20.06.2019). «Построение системы счисления остатков с использованием аппаратной эффективной диагональной функции» . Электроника . 8 (6): 694. doi : 10.3390/electronics8060694 . ISSN 2079-9292 .
Все моделируемые схемы были описаны на языке описания аппаратного обеспечения сверхбыстрых интегральных схем (VHSIC) (VHDL). Аппаратное моделирование проводилось на Xilinx FPGA Artix 7 xc7a200tfbg484-2.
- ^ Гупта, Анкит; Сунеджа, Крити (май 2020 г.). «Аппаратное проектирование приближенного матричного умножителя на основе FPGA в Verilog» . 2020 4-я Международная конференция по интеллектуальным вычислениям и системам управления (ICICCS) . Мадурай, Индия: IEEE. стр. 496–498. дои : 10.1109/ICICCS48265.2020.9121004 . ISBN 978-1-7281-4876-2 . S2CID 219990653 .
- ↑ Перейти обратно: Перейти обратно: а б с Д'Амур, Майкл Р., главный операционный директор DRC Computer Corporation. «Стандартные реконфигурируемые вычисления». Приглашенный докладчик в Университете Делавэра, 28 февраля 2007 г.
- ^ Богган, Ша'Киа и Дэниел М. Прессел (август 2007 г.). Графические процессоры: новая платформа для вычислений общего назначения. Архивировано 25 декабря 2016 г. в Wayback Machine (PDF). ARL-SR-154, Исследовательская лаборатория армии США. Проверено 7 ноября 2007 г.
- ^ Масленников, Олег (2002). «Систематическое формирование исполнительных программ для элементов процессора в параллельных системах ASIC или FPGA и их преобразование в VHDL-описания блоков управления элементами процессора». Конспекты лекций по информатике , 2328/2002: с. 272.
- ^ Симокава, Ю.; Фува, Ю.; Арамаки, Н. (18–21 ноября 1991 г.). «Параллельный нейрокомпьютер ASIC VLSI для большого количества нейронов и скорости миллиарда соединений в секунду». [Материалы] 1991 Международная совместная конференция IEEE по нейронным сетям . Том. 3. С. 2162–2167. дои : 10.1109/IJCNN.1991.170708 . ISBN 978-0-7803-0227-3 . S2CID 61094111 .
- ^ Акен, Кевин П.; Ирвин, Мэри Джейн; Оуэнс, Роберт М. (июль 1998 г.). «Параллельная архитектура ASIC для эффективного кодирования фрактальных изображений». Журнал обработки сигналов СБИС . 19 (2): 97–113. дои : 10.1023/А:1008005616596 . S2CID 2976028 .
- ↑ Канг, Эндрю Б. (21 июня 2004 г.) « Обзор проблемы DFM в полупроводниковой промышленности. Архивировано 31 января 2008 г. в Wayback Machine ». Калифорнийский университет, Сан-Диего. «Технология будущего проектирования для производства (DFM) должна сократить затраты на проектирование [невозвратные затраты] и напрямую решить производственные [невозвратные затраты] — стоимость набора масок и карты зондов, — которая составляет более 1 миллиона долларов при 90-нм техпроцессе. технологический узел и создает значительный сдерживающий фактор для инноваций на основе полупроводников».
- ↑ Перейти обратно: Перейти обратно: а б Паттерсон и Хеннесси, с. 751.
- ^ Премия Сидни Фернбаха, врученная изобретателю MPI Биллу Гроппу. Архивировано 25 июля 2011 г. в Wayback Machine, MPI упоминается как «доминирующий интерфейс связи HPC».
- ^ Шен, Джон Пол; Микко Х. Липасти (2004). Современный дизайн процессоров: основы суперскалярных процессоров (1-е изд.). Дубьюк, Айова: МакГроу-Хилл. п. 561. ИСБН 978-0-07-057064-1 .
Однако Святой Грааль таких исследований — автоматическое распараллеливание последовательных программ — еще не материализовался. Хотя автоматическое распараллеливание определенных классов алгоритмов было продемонстрировано, такой успех в основном ограничивался научными и численными приложениями с предсказуемым управлением потоком данных (например, структурами вложенных циклов со статически определяемым количеством итераций) и статически анализируемыми шаблонами доступа к памяти. (например, обход больших многомерных массивов данных с плавающей запятой).
- ^ Энциклопедия параллельных вычислений, том 4, Дэвид Падуа, 2011 г. ISBN 0387097651 стр. 265
- ^ Асанович, Крсте и др. (18 декабря 2006 г.). «Пейзаж исследований в области параллельных вычислений: взгляд из Беркли» (PDF) . Калифорнийский университет, Беркли. Технический отчет № UCB/EECS-2006-183. См. таблицу на стр. 17–19.
- ^ Дэвид Р., Хелман; Дэвид А., Бадер; ДжаДжа, Джозеф (1998). «Рандомизированный алгоритм параллельной сортировки с экспериментальным исследованием» (PDF) . Журнал параллельных и распределенных вычислений . 52 : 1–23. дои : 10.1006/jpdc.1998.1462 . HDL : 1903/835 . Проверено 26 октября 2012 г. [ мертвая ссылка ]
- ^ Добель Б., Хартиг Х. и Энгель М. (2012) «Поддержка операционной системы для избыточной многопоточности». Материалы Десятой Международной конференции ACM по встраиваемому программному обеспечению , 83–92. дои : 10.1145/2380356.2380375
- ↑ Перейти обратно: Перейти обратно: а б Паттерсон и Хеннесси, стр. 749–50: «Несмотря на успех в продвижении нескольких технологий, полезных в более поздних проектах, ILLIAC IV потерпел неудачу как компьютер. Затраты выросли с 8 миллионов долларов, оцененных в 1966 году, до 31 миллиона долларов к 1972 году, несмотря на строительство только четверть запланированной машины. Это был, пожалуй, самый печально известный из суперкомпьютеров. Проект стартовал в 1965 году, а первое реальное применение было запущено в 1976 году».
- ^ Менабреа, LF (1842). Эскиз аналитической машины, изобретенной Чарльзом Бэббиджем . Всемирная библиотека Женевы. Проверено 7 ноября 2007 г. цитата: «Когда необходимо выполнить длинную серию одинаковых вычислений, например тех, которые необходимы для формирования числовых таблиц, машину можно ввести в действие так, чтобы она выдавала несколько результатов одновременно, что значительно сократит всю работу». количество процессов».
- ↑ Перейти обратно: Перейти обратно: а б Паттерсон и Хеннесси, с. 753.
- ^ Р.В. Хокни, Ч.Р. Джессоуп. Параллельные компьютеры 2: Архитектура, программирование и алгоритмы, Том 2 . 1988. с. 8 цитата: «Считается, что самое раннее упоминание о параллелизме в компьютерном проектировании содержится в публикации генерала Л. Ф. Менабреа в… 1842 году под названием « Очерк аналитической машины, изобретенной Чарльзом Бэббиджем ».
- ^ Батай, М. (1 апреля 1972 г.). «Что-то старое: Gamma 60, компьютер, опередивший свое время» . Новости компьютерной архитектуры ACM SIGARCH . 1 (2): 10–15. дои : 10.1145/641276.641278 . ISSN 0163-5964 . S2CID 34642285 .
- ^ «Архитектурный эскиз Bull Gamma 60 — Марк Смотерман» . www.feb-patrimoine.com . Проверено 14 августа 2023 г.
- ^ Тумлин, Смотерман (14 августа 2023 г.). «Оценка конструкции Gamma 60» . Музей компьютерной истории ACONIT . Департамент компьютерных наук Университета Клемсона . Проверено 14 августа 2023 г.
- ^ «Параллельное программирование», С. Гилл, The Computer Journal Vol. 1 № 1, стр. 2–10, Британское компьютерное общество, апрель 1958 г.
- ↑ Перейти обратно: Перейти обратно: а б с д и Уилсон, Грегори В. (1994). «История развития параллельных вычислений» . Технологический институт Вирджинии/Государственный университет Норфолка, Интерактивное обучение с цифровой библиотекой в области компьютерных наук . Проверено 8 января 2008 г.
- ^ Антес, Гри (19 ноября 2001 г.). «Сила параллелизма» . Компьютерный мир . Архивировано из оригинала 31 января 2008 года . Проверено 8 января 2008 г.
- ^ Паттерсон и Хеннесси, с. 749.
- ^ Мински, Марвин (1986). Общество разума . Нью-Йорк: Саймон и Шустер. стр. 17 . ISBN 978-0-671-60740-1 .
- ^ Мински, Марвин (1986). Общество разума . Нью-Йорк: Саймон и Шустер. стр. 29 . ISBN 978-0-671-60740-1 .
- ^ Блейксли, Томас (1996). За пределами Сознательного Разума. Раскрытие секретов себя . Спрингер. стр. 6–7 . ISBN 9780306452628 .
- ^ Газзанига, Майкл ; Леду, Джозеф (1978). Интегрированный разум . стр. 132–161.
- ^ Газзанига, Майкл (1985). Социальный мозг. Открытие сетей разума . Основные книги. стр. 77–79 . ISBN 9780465078509 .
- ^ Орнштейн, Роберт (1992). Эволюция сознания: истоки нашего мышления . стр. 2 .
- ^ Хилгард, Эрнест (1977). Разделенное сознание: множественный контроль над человеческими мыслями и действиями . Нью-Йорк: Уайли. ISBN 978-0-471-39602-4 .
- ^ Хилгард, Эрнест (1986). Разделенное сознание: множественное управление человеческими мыслями и действиями (расширенное издание) . Нью-Йорк: Уайли. ISBN 978-0-471-80572-4 .
- ^ Каку, Мичио (2014). Будущее разума .
- ^ Успенский, Петр (1992). «Глава 3». В поисках чудесного. Фрагменты неизвестного учения . стр. 72–83.
- ^ «Официальный сайт нейрокластерных моделей мозга» . Проверено 22 июля 2017 г.
Дальнейшее чтение [ править ]
- Родригес, К.; Вильягра, М.; Баран, Б. (29 августа 2008 г.). «Асинхронные командные алгоритмы для логической выполнимости». Биомодели сетевых, информационных и вычислительных систем, 2007. Бионетика, 2007. 2-е : 66–69. дои : 10.1109/BIMNICS.2007.4610083 . S2CID 15185219 .
- Сечин А.; Параллельные вычисления в фотограмметрии. ГИМ Интернешнл. № 1, 2016, стр. 21–23.
Внешние ссылки [ править ]
- Ливерморская национальная лаборатория Лоуренса: введение в параллельные вычисления
- Проектирование и создание параллельных программ, Ян Фостер
- Интернет-архив параллельных вычислений