Параллельные вычисления

Послушайте эту статью
Из Википедии, бесплатной энциклопедии
Большие суперкомпьютеры , такие как IBM Blue Gene/P, предназначены для интенсивного использования параллелизма.

Параллельные вычисления — это тип вычислений , при котором множество вычислений или процессов выполняются одновременно. [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 ядер, при этом некоторые конструкции имеют сочетание ядер производительности и эффективности (например, ARM big. НЕБОЛЬШАЯ конструкция) из-за тепловых и конструктивных ограничений. [12] [ нужна цитата ]

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

Закон Амдала и Густавсона закон .

Графическое представление закона Амдала . Ускорение программы при распараллеливании ограничено тем, какая часть программы может быть распараллелена. Например, если 90% программы можно распараллелить, теоретическое максимальное ускорение при использовании параллельных вычислений составит 10 раз, независимо от того, сколько процессоров используется.
Предположим, что задача состоит из двух независимых частей A и B. : Часть B занимает примерно 25% времени всех вычислений. Приложив очень много усилий, можно сделать эту часть в 5 раз быстрее, но это лишь немного сократит время всего вычисления. возможно, потребуется выполнить меньше работы Напротив, чтобы сделать часть А вдвое быстрее, . Это сделает вычисления намного быстрее, чем при оптимизации части B , даже несмотря на то, что ускорение части B больше в соотношении (5 раз против 2 раз).

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

Потенциальное ускорение алгоритма на параллельной вычислительной платформе определяется законом Амдала. [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: функция Dep(a, b)
 2: с := а * б
 3: д := 3 * с
 4: конечная функция
 

В этом примере инструкция 3 не может быть выполнена до (или даже параллельно) инструкции 2, поскольку инструкция 3 использует результат инструкции 2. Она нарушает условие 1 и, таким образом, вводит зависимость от потока.

1: функция NoDep(a, b)
 2: с := а * б
 3: д := 3 * б
 4: е := а + б
 5: конечная функция
 

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

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

и замедление Условия гонки, взаимное исключение, синхронизация параллельное

Подзадачи в параллельной программе часто называют потоками . В некоторых параллельных компьютерных архитектурах используются меньшие и облегченные версии потоков, известные как волокна , в то время как в других используются более крупные версии, известные как процессы . Однако «потоки» обычно воспринимаются как общий термин для подзадач. [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: Добавьте 1 к переменной V
4A: обратная запись в переменную V. 4B: обратная запись в переменную V.
5A: разблокировать переменную V 5B: Разблокировать переменную V

Один поток успешно заблокирует переменную V, в то время как другой поток будет заблокирован и не сможет продолжить работу, пока V не будет снова разблокирован. Это гарантирует корректное выполнение программы. Блокировки могут быть необходимы для обеспечения корректного выполнения программы, когда потоки должны сериализовать доступ к ресурсам, но их использование может сильно замедлить работу программы и повлиять на ее надежность . [21]

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

Многие параллельные программы требуют, чтобы их подзадачи выполнялись синхронно . Это требует использования барьера . Барьеры обычно реализуются с помощью блокировки или семафора . [23] Один класс алгоритмов, известный как алгоритмы без блокировок и без ожидания , вообще избегает использования блокировок и барьеров. Однако этот подход, как правило, сложен в реализации и требует правильно спроектированных структур данных. [24]

Не всякое распараллеливание приводит к ускорению. Как правило, поскольку задача разбивается на все больше и больше потоков, эти потоки тратят все большую часть своего времени на общение друг с другом или ожидание друг друга для доступа к ресурсам. [25] [26] Как только накладные расходы из-за конкуренции за ресурсы или связи преобладают над временем, затрачиваемым на другие вычисления, дальнейшее распараллеливание (то есть разделение рабочей нагрузки на еще большее количество потоков) увеличивает, а не уменьшает количество времени, необходимое для завершения. Эта проблема, известная как параллельное замедление , [27] в некоторых случаях можно улучшить путем анализа и перепроектирования программного обеспечения. [28]

, крупнозернистый и параллелизм смущающий Мелкозернистый

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

Таксономия Флинна [ править ]

Майкл Дж. Флинн создал одну из самых ранних систем классификации параллельных (и последовательных) компьютеров и программ, теперь известную как таксономия Флинна . Флинн классифицировал программы и компьютеры по тому, работали ли они с использованием одного или нескольких наборов инструкций, а также по тому, использовали ли эти инструкции один или несколько наборов данных.

Классификация «одна инструкция — одни данные» (SISD) эквивалентна полностью последовательной программе. Классификация «одна инструкция — несколько данных» (SIMD) аналогична многократному выполнению одной и той же операции над большим набором данных. Обычно это делается в приложениях обработки сигналов . Классификация «множественные инструкции — одни данные» (MISD) — редко используемая классификация. Хотя были разработаны компьютерные архитектуры для решения этой проблемы (например, систолические массивы ), реализовано лишь несколько приложений, соответствующих этому классу. Программы с несколькими инструкциями и несколькими данными (MIMD) на сегодняшний день являются наиболее распространенным типом параллельных программ.

По словам Дэвида А. Паттерсона и Джона Л. Хеннесси : «Некоторые машины, конечно, являются гибридами этих категорий, но эта классическая модель выжила, потому что она проста, легка для понимания и дает хорошее первое приближение. возможно, из-за ее понятности — наиболее широко используемой схемы». [30]

Детализация [ править ]

Параллелизм на уровне битов [ править ]

3 Тайваньская Тайваньия , параллельное суперкомпьютерное устройство, присоединившееся к COVID-19. исследованиям

С момента появления в 1970-х годах технологии производства компьютерных чипов сверхкрупной интеграции (СБИС) и примерно до 1986 года ускорение компьютерной архитектуры было обусловлено удвоением размера компьютерного слова — количества информации, которой процессор может манипулировать за цикл. [31] Увеличение размера слова уменьшает количество инструкций, которые процессор должен выполнить для выполнения операции над переменными, размеры которых превышают длину слова. Например, если 8-битный процессор должен сложить два 16-битных целых числа , процессор должен сначала сложить 8 младших битов каждого целого числа, используя стандартную инструкцию сложения, а затем сложить 8 старших битов, используя команду сложения. - инструкция переноса и бит переноса из сложения младшего порядка; таким образом, 8-битному процессору для выполнения одной операции требуются две инструкции, тогда как 16-битный процессор сможет выполнить операцию с помощью одной инструкции.

Исторически 4-битные микропроцессоры были заменены 8-битными, затем 16-битными, а затем 32-битными микропроцессорами. Эта тенденция в целом закончилась с появлением 32-битных процессоров, которые на протяжении двух десятилетий были стандартом в вычислениях общего назначения. Лишь в начале 2000-х годов, с появлением архитектур x86-64 , 64-битные процессоры стали обычным явлением.

Параллелизм на уровне инструкций [ править ]

Канонический процессор без конвейера . Для выполнения одной инструкции требуется пять тактов, и, таким образом, процессор может выдавать субскалярную производительность ( IPC = 0,2 < 1 ).

Компьютерная программа, по сути, представляет собой поток инструкций, выполняемых процессором. Без параллелизма на уровне команд процессор может выдавать только менее одной инструкции за такт ( IPC < 1 ). Эти процессоры известны как субскалярные процессоры. Эти инструкции можно переупорядочивать и объединять в группы, которые затем выполняются параллельно без изменения результата программы. Это известно как параллелизм на уровне инструкций. Достижения в области параллелизма на уровне команд доминировали в компьютерной архитектуре с середины 1980-х до середины 1990-х годов. [32]

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

Все современные процессоры имеют многоступенчатые конвейеры команд . Каждый этап конвейера соответствует отдельному действию, которое процессор выполняет над этой инструкцией на этом этапе; процессор с N -этапным конвейером может иметь до N различных инструкций на разных стадиях завершения и, таким образом, может выдавать одну инструкцию за такт ( IPC = 1 ). Эти процессоры известны как скалярные процессоры. Каноническим примером конвейерного процессора является RISC- процессор с пятью этапами: выборка инструкций (IF), декодирование инструкций (ID), выполнение (EX), доступ к памяти (MEM) и обратная запись в регистр (WB). Процессор Pentium 4 имел 35-ступенчатый конвейер. [33]

Канонический пятиступенчатый конвейерный процессор с двумя исполнительными блоками. В лучшем случае для выполнения двух инструкций требуется один такт, и, таким образом, процессор может обеспечить суперскалярную производительность ( IPC = 2 > 1 ).

Большинство современных процессоров также имеют несколько исполнительных блоков . Обычно они сочетают эту функцию с конвейерной обработкой и, таким образом, могут выдавать более одной инструкции за такт ( IPC > 1 ). Эти процессоры известны как суперскалярные процессоры. Суперскалярные процессоры отличаются от многоядерных процессоров тем, что несколько исполнительных блоков не являются целыми процессорами (т.е. процессорными блоками). Инструкции можно группировать вместе только в том случае, если между ними нет зависимости данных . Табло и алгоритм Томасуло (который похож на табло, но использует переименование регистров ) — два наиболее распространенных метода реализации внеочередного выполнения и параллелизма на уровне инструкций.

Параллелизм задач [ править ]

Параллелизм задач — это характеристика параллельной программы, заключающаяся в том, что «совершенно разные вычисления могут выполняться как с одними и теми же, так и с разными наборами данных». [34] Это контрастирует с параллелизмом данных, когда одни и те же вычисления выполняются на одних и тех же или разных наборах данных. Параллелизм задач предполагает разложение задачи на подзадачи и последующее распределение каждой подзадачи процессору для выполнения. Затем процессоры будут выполнять эти подзадачи одновременно и часто совместно. Параллелизм задач обычно не зависит от размера проблемы. [35]

Параллелизм на уровне суперслов [ править ]

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

Аппаратное обеспечение [ править ]

Память и общение [ править ]

Основная память в параллельном компьютере представляет собой либо разделяемую память (разделяемую всеми обрабатывающими элементами в одном адресном пространстве ), либо распределенную память (в которой каждый обрабатывающий элемент имеет собственное локальное адресное пространство). [37] Распределенная память означает тот факт, что память распределена логически, но часто подразумевается, что она также распределена физически. Распределенная общая память и виртуализация памяти объединяют два подхода, при которых обрабатывающий элемент имеет собственную локальную память и доступ к памяти на нелокальных процессорах. Доступ к локальной памяти обычно происходит быстрее, чем доступ к нелокальной памяти. На суперкомпьютерах распределенное общее пространство памяти может быть реализовано с использованием модели программирования, такой как PGAS . Эта модель позволяет процессам на одном вычислительном узле прозрачно получать доступ к удаленной памяти другого вычислительного узла. Все вычислительные узлы также подключены к внешней системе общей памяти через высокоскоростное соединение, такое как Infiniband . Эта внешняя система общей памяти известна как пакетный буфер , который обычно создается из массивов энергонезависимой памяти, физически распределенных по нескольким устройствам ввода/вывода. О узлы.

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

Компьютерные архитектуры, в которых к каждому элементу основной памяти можно получить доступ с одинаковой задержкой и пропускной способностью , известны как системы унифицированного доступа к памяти (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 .

Массивно-параллельные вычисления [ править ]
Шкаф IBM Blue Gene/L массивно-параллельного суперкомпьютера

Процессор с массовым параллелизмом (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) [ править ]
от Nvidia Карта Tesla 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 для моделирования молекулярной динамики .

Векторные процессоры [ править ]
Cray -1 — векторный процессор.

Векторный процессор — это ЦП или компьютерная система, которая может выполнять одну и ту же инструкцию для больших наборов данных. Векторные процессоры имеют операции высокого уровня, которые работают с линейными массивами чисел или векторов. Примером векторной операции является 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]

Отказоустойчивость [ править ]

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

История [ править ]

ILLIAC IV , «самый печально известный из суперкомпьютеров» [64]

Истоки истинного (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]

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

См. также [ править ]

Ссылки [ править ]

  1. ^ Готлиб, Аллан; Алмаси, Джордж С. (1989). Высокопараллельные вычисления . Редвуд-Сити, Калифорния: Бенджамин/Каммингс. ISBN  978-0-8053-0177-9 .
  2. ^ С.В. Адве и др. (ноябрь 2008 г.). «Исследования в области параллельных вычислений в Иллинойсе: программа UPCRC». Архивировано 11 января 2018 г. в Wayback Machine (PDF). Parallel@Illinois, Университет Иллинойса в Урбана-Шампейн. «Основные методы достижения этих преимуществ в производительности — увеличение тактовой частоты и более умные, но все более сложные архитектуры — сейчас наталкиваются на так называемую стену мощности. Компьютерная индустрия согласилась с тем, что будущий рост производительности должен в значительной степени происходить за счет увеличения количества процессоров (или ядер). ) на кристалле, а не заставлять одно ядро ​​работать быстрее».
  3. ^ Асанович и др. Старое [традиционное мнение]: Электроэнергия бесплатна, но транзисторы дороги. Новое [традиционное мнение] заключается в том, что энергия стоит дорого, но транзисторы «бесплатны».
  4. ^ Асанович, Крсте и др. (18 декабря 2006 г.). «Пейзаж исследований в области параллельных вычислений: взгляд из Беркли» (PDF) . Калифорнийский университет, Беркли. Технический отчет № UCB/EECS-2006-183. «Старое [традиционное мнение]: увеличение тактовой частоты является основным методом улучшения производительности процессора. Новое [традиционное мнение]: увеличение параллелизма является основным методом улучшения производительности процессора… Даже представители Intel, компании, которая обычно ассоциируется с «более высокой тактовой частотой» -скорость лучше», предупредил, что традиционные подходы к максимизации производительности за счет увеличения тактовой частоты доведены до предела».
  5. ^ Параллельное и параллельное программирование на Haskell . О'Рейли Медиа. 2013. ISBN  9781449335922 .
  6. ^ Хеннесси, Джон Л .; Паттерсон, Дэвид А .; Ларус, Джеймс Р. (1999). Компьютерная организация и проектирование: аппаратно-программный интерфейс (2-е изд., 3-е печат. изд.). Сан-Франциско: Кауфманн. ISBN  978-1-55860-428-5 .
  7. ^ Перейти обратно: а б Барни, Блейз. «Введение в параллельные вычисления» . Ливерморская национальная лаборатория Лоуренса . Проверено 9 ноября 2007 г.
  8. ^ Томас Раубер; Гудула Рюнгер (2013). Параллельное программирование: для многоядерных и кластерных систем . Springer Science & Business Media. п. 1. ISBN  9783642378010 .
  9. ^ Хеннесси, Джон Л.; Паттерсон, Дэвид А. (2002). Архитектура компьютера / Количественный подход (3-е изд.). Сан-Франциско, Калифорния: International Thomson. п. 43. ИСБН  978-1-55860-724-8 .
  10. ^ Рабай, Ян М. (1996). Цифровые интегральные схемы: взгляд на проектирование . Река Аппер-Сэддл, Нью-Джерси: Прентис-Холл. п. 235. ИСБН  978-0-13-178609-7 .
  11. ^ Флинн, Лори Дж. (8 мая 2004 г.). «Intel прекращает разработку двух новых микропроцессоров» . Газета "Нью-Йорк Таймс . Проверено 5 июня 2012 г.
  12. ^ Томас Раубер; Гудула Рюнгер (2013). Параллельное программирование: для многоядерных и кластерных систем . Springer Science & Business Media. п. 2. ISBN  9783642378010 .
  13. ^ Томас Раубер; Гудула Рюнгер (2013). Параллельное программирование: для многоядерных и кластерных систем . Springer Science & Business Media. п. 3. ISBN  9783642378010 .
  14. ^ Амдал, Джин М. (1967). «Действительность однопроцессорного подхода для достижения крупномасштабных вычислительных возможностей» . состоявшейся 18–20 апреля 1967 г. Материалы весенней совместной компьютерной конференции AFIPS '67 (Весна) , стр. 483–485. дои : 10.1145/1465482.1465560 . ISBN  9780805301779 . S2CID   195607370 . {{cite book}}: CS1 maint: дата и год ( ссылка )
  15. ^ Брукс, Фредерик П. (1996). Очерки мифического человеко-месяца по разработке программного обеспечения (Юбилейное изд., переп. с корр., 5. [Др.] изд.). Ридинг, Массачусетс [ua]: Аддисон-Уэсли. ISBN  978-0-201-83595-3 .
  16. ^ Майкл МакКул; Джеймс Рейндерс; Арч Робисон (2013). Структурированное параллельное программирование: шаблоны для эффективных вычислений . Эльзевир. п. 61.
  17. ^ Густафсон, Джон Л. (май 1988 г.). «Переоценка закона Амдала» . Коммуникации АКМ . 31 (5): 532–533. CiteSeerX   10.1.1.509.6892 . дои : 10.1145/42411.42415 . S2CID   33937392 . Архивировано из оригинала 27 сентября 2007 г.
  18. ^ Бернштейн, AJ (1 октября 1966 г.). «Анализ программ для параллельной обработки». Транзакции IEEE на электронных компьютерах . ЕС-15 (5): 757–763. дои : 10.1109/PGEC.1966.264565 .
  19. ^ Рооста, Сейед Х. (2000). Параллельная обработка и параллельные алгоритмы: теория и вычисления . Нью-Йорк, штат Нью-Йорк [ua]: Springer. п. 114. ИСБН  978-0-387-98716-3 .
  20. ^ «Процессы и потоки» . Сеть разработчиков Microsoft . Корпорация Майкрософт, 2018 год . Проверено 10 мая 2018 г.
  21. ^ Краусс, Кирк Дж (2018). «Потокобезопасность для производительности» . Развивайтесь ради производительности . Архивировано из оригинала 13 мая 2018 г. Проверено 10 мая 2018 г.
  22. ^ Таненбаум, Эндрю С. (1 февраля 2002 г.). Введение в взаимоблокировки операционной системы . Pearson Education, Информит . Проверено 10 мая 2018 г. {{cite book}}: |website= игнорируется ( помогите )
  23. ^ Сесил, Дэвид (3 ноября 2015 г.). «Внутренности синхронизации – семафор» . Встроенный . АспенКор . Проверено 10 мая 2018 г.
  24. ^ Прешинг, Джефф (8 июня 2012 г.). «Введение в программирование без блокировки» . Прешинг по программированию . Проверено 10 мая 2018 г.
  25. ^ «Что является противоположностью слову «смущающая параллель»?» . Переполнение стека . Проверено 10 мая 2018 г.
  26. ^ Шварц, Дэвид (15 августа 2011 г.). «Что такое конфликт потоков?» . Переполнение стека . Проверено 10 мая 2018 г.
  27. ^ Куканов, Алексей (04 марта 2008 г.). «Почему простой тест может привести к параллельному замедлению» . Проверено 15 февраля 2015 г.
  28. ^ Краусс, Кирк Дж (2018). «Поточность для повышения производительности» . Развивайтесь ради производительности . Архивировано из оригинала 13 мая 2018 г. Проверено 10 мая 2018 г.
  29. ^ Флинн, Майкл Дж. (сентябрь 1972 г.). «Некоторые компьютерные организации и их эффективность» (PDF) . Транзакции IEEE на компьютерах . С-21 (9): 948–960. дои : 10.1109/TC.1972.5009071 .
  30. ^ Паттерсон и Хеннесси, с. 748.
  31. ^ Сингх, Дэвид Каллер; Дж. П. (1997). Параллельная компьютерная архитектура (изд. [Начдр.]). Сан-Франциско: Morgan Kaufmann Publ. п. 15. ISBN  978-1-55860-343-1 . {{cite book}}: CS1 maint: несколько имен: список авторов ( ссылка )
  32. ^ Каллер и др. например 15.
  33. ^ Патт, Йельский университет (апрель 2004 г.). « Микропроцессор через десять лет: каковы проблемы и как мы их решаем? Архивировано 14 апреля 2008 г. в Wayback Machine (wmv). Выступление выдающегося лектора в Университете Карнеги-Меллона . Проверено 7 ноября 2007 г.
  34. ^ Каллер и др. например 124.
  35. ^ Каллер и др. например 125.
  36. ^ Сэмюэл Ларсен; Саман Амарасингхе. «Использование параллелизма на уровне суперслов с наборами мультимедийных инструкций» (PDF) .
  37. ^ Перейти обратно: а б Паттерсон и Хеннесси, с. 713.
  38. ^ Перейти обратно: а б Хеннесси и Паттерсон, с. 549.
  39. ^ Паттерсон и Хеннесси, с. 714.
  40. ^ Гош (2007) , с. 10. Кейдар (2008) .
  41. ^ Линч (1996) , с. XIX, 1–2. Пелег (2000) , с. 1.
  42. ^ Что такое кластеризация? Компьютерный словарь Webopedia. Проверено 7 ноября 2007 г.
  43. ^ Определение Беовульфа. Архивировано 10 октября 2012 г. в журнале Wayback Machine PC Magazine . Проверено 7 ноября 2007 г.
  44. ^ «Список статистики | ТОП500 суперкомпьютерных сайтов» . www.top500.org . Проверено 05 августа 2018 г.
  45. ^ «Interconnect». Архивировано 28 января 2015 г. в Wayback Machine .
  46. ^ Хеннесси и Паттерсон, с. 537.
  47. ^ Определение MPP. Архивировано 11 мая 2013 г. в журнале Wayback Machine PC Magazine . Проверено 7 ноября 2007 г.
  48. ^ Киркпатрик, Скотт (2003). «КОМПЬЮТЕРНАЯ НАУКА: впереди трудные времена». Наука . 299 (5607): 668–669. дои : 10.1126/science.1081623 . ПМИД   12560537 . S2CID   60622095 .
  49. ^ Валуева, Мария; Валуев Георгий; Семенова, Наталья; Ляхов, Павел; Червяков, Николай; Каплун Дмитрий; Богаевский Данил (20.06.2019). «Построение системы счисления остатков с использованием аппаратной эффективной диагональной функции» . Электроника . 8 (6): 694. doi : 10.3390/electronics8060694 . ISSN   2079-9292 . Все моделируемые схемы были описаны на языке описания аппаратного обеспечения сверхбыстрых интегральных схем (VHSIC) (VHDL). Аппаратное моделирование проводилось на Xilinx FPGA Artix 7 xc7a200tfbg484-2.
  50. ^ Гупта, Анкит; Сунеджа, Крити (май 2020 г.). «Аппаратное проектирование приближенного матричного умножителя на основе FPGA в Verilog» . 2020 4-я Международная конференция по интеллектуальным вычислениям и системам управления (ICICCS) . Мадурай, Индия: IEEE. стр. 496–498. дои : 10.1109/ICICCS48265.2020.9121004 . ISBN  978-1-7281-4876-2 . S2CID   219990653 .
  51. ^ Перейти обратно: а б с Д'Амур, Майкл Р., главный операционный директор DRC Computer Corporation. «Стандартные реконфигурируемые вычисления». Приглашенный докладчик в Университете Делавэра, 28 февраля 2007 г.
  52. ^ Богган, Ша'Киа и Дэниел М. Прессел (август 2007 г.). Графические процессоры: новая платформа для вычислений общего назначения. Архивировано 25 декабря 2016 г. в Wayback Machine (PDF). ARL-SR-154, Исследовательская лаборатория армии США. Проверено 7 ноября 2007 г.
  53. ^ Масленников, Олег (2002). «Систематическая генерация исполнительных программ для элементов процессора в параллельных системах ASIC или FPGA и их преобразование в VHDL-описания блоков управления элементами процессора». Конспекты лекций по информатике , 2328/2002: с. 272.
  54. ^ Симокава, Ю.; Фува, Ю.; Арамаки, Н. (18–21 ноября 1991 г.). «Параллельный нейрокомпьютер ASIC VLSI для большого количества нейронов и скорости миллиарда соединений в секунду». [Материалы] 1991 Международная совместная конференция IEEE по нейронным сетям . Том. 3. С. 2162–2167. дои : 10.1109/IJCNN.1991.170708 . ISBN  978-0-7803-0227-3 . S2CID   61094111 .
  55. ^ Акен, Кевин П.; Ирвин, Мэри Джейн; Оуэнс, Роберт М. (июль 1998 г.). «Параллельная архитектура ASIC для эффективного кодирования фрактальных изображений». Журнал обработки сигналов СБИС . 19 (2): 97–113. дои : 10.1023/А:1008005616596 . S2CID   2976028 .
  56. ^ Канг, Эндрю Б. (21 июня 2004 г.) « Обзор проблемы DFM в полупроводниковой промышленности. Архивировано 31 января 2008 г. в Wayback Machine ». Калифорнийский университет, Сан-Диего. «Технология будущего проектирования для производства (DFM) должна сократить затраты на проектирование [невозвратные затраты] и напрямую решить производственные [невозвратные затраты] — стоимость набора масок и карты зондов, — которая составляет более 1 миллиона долларов при 90-нм техпроцессе. технологический узел и создает значительный сдерживающий фактор для инноваций на основе полупроводников».
  57. ^ Перейти обратно: а б Паттерсон и Хеннесси, с. 751.
  58. ^ Премия Сидни Фернбаха, врученная изобретателю MPI Биллу Гроппу. Архивировано 25 июля 2011 г. в Wayback Machine, MPI упоминается как «доминирующий интерфейс связи HPC».
  59. ^ Шен, Джон Пол; Микко Х. Липасти (2004). Современный дизайн процессоров: основы суперскалярных процессоров (1-е изд.). Дубьюк, Айова: МакГроу-Хилл. п. 561. ИСБН  978-0-07-057064-1 . Однако Святой Грааль таких исследований — автоматическое распараллеливание последовательных программ — еще не материализовался. Хотя автоматическое распараллеливание определенных классов алгоритмов было продемонстрировано, такой успех в основном ограничивался научными и численными приложениями с предсказуемым управлением потоком данных (например, структурами вложенных циклов со статически определяемым количеством итераций) и статически анализируемыми шаблонами доступа к памяти. (например, обход больших многомерных массивов данных с плавающей запятой).
  60. ^ Энциклопедия параллельных вычислений, том 4 , Дэвид Падуа, 2011 г. ISBN   0387097651 стр. 265
  61. ^ Асанович, Крсте и др. (18 декабря 2006 г.). «Пейзаж исследований в области параллельных вычислений: взгляд из Беркли» (PDF) . Калифорнийский университет, Беркли. Технический отчет № UCB/EECS-2006-183. См. таблицу на стр. 17–19.
  62. ^ Дэвид Р., Хелман; Дэвид А., Бадер; ДжаДжа, Джозеф (1998). «Рандомизированный алгоритм параллельной сортировки с экспериментальным исследованием» (PDF) . Журнал параллельных и распределенных вычислений . 52 : 1–23. дои : 10.1006/jpdc.1998.1462 . HDL : 1903/835 . Проверено 26 октября 2012 г. [ мертвая ссылка ]
  63. ^ Добель Б., Хартиг Х. и Энгель М. (2012) «Поддержка операционной системы для избыточной многопоточности». Материалы Десятой Международной конференции ACM по встраиваемому программному обеспечению , 83–92. дои : 10.1145/2380356.2380375
  64. ^ Перейти обратно: а б Паттерсон и Хеннесси, стр. 749–50: «Несмотря на успех в продвижении нескольких технологий, полезных в более поздних проектах, ILLIAC IV потерпел неудачу как компьютер. Затраты выросли с 8 миллионов долларов, оцененных в 1966 году, до 31 миллиона долларов к 1972 году, несмотря на строительство только четверть запланированной машины. Это был, пожалуй, самый печально известный из суперкомпьютеров. Проект стартовал в 1965 году, а первое реальное применение было запущено в 1976 году».
  65. ^ Менабреа, LF (1842). Эскиз аналитической машины, изобретенной Чарльзом Бэббиджем . Всемирная библиотека Женевы. Проверено 7 ноября 2007 г. цитата: «Когда необходимо выполнить длинную серию идентичных вычислений, например тех, которые необходимы для формирования числовых таблиц, машину можно ввести в действие так, чтобы она выдавала несколько результатов одновременно, что значительно сократит всю работу. количество процессов».
  66. ^ Перейти обратно: а б Паттерсон и Хеннесси, с. 753.
  67. ^ Р. В. Хокни, Ч. Р. Джессхоп. Параллельные компьютеры 2: Архитектура, программирование и алгоритмы, Том 2 . 1988. с. 8 цитата: «Считается, что самое раннее упоминание о параллелизме в компьютерном проектировании содержится в публикации генерала Л. Ф. Менабреа в… 1842 году, озаглавленной « Очерк аналитической машины, изобретенной Чарльзом Бэббиджем ».
  68. ^ Батай, М. (1 апреля 1972 г.). «Что-то старое: Gamma 60, компьютер, опередивший свое время» . Новости компьютерной архитектуры ACM SIGARCH . 1 (2): 10–15. дои : 10.1145/641276.641278 . ISSN   0163-5964 . S2CID   34642285 .
  69. ^ «Архитектурный эскиз Bull Gamma 60 — Марк Смотерман» . www.feb-patrimoine.com . Проверено 14 августа 2023 г.
  70. ^ Тумлин, Смотерман (14 августа 2023 г.). «Оценка конструкции Gamma 60» . Музей компьютерной истории ACONIT . Департамент компьютерных наук Университета Клемсона . Проверено 14 августа 2023 г.
  71. ^ «Параллельное программирование», С. Гилл, The Computer Journal Vol. 1 № 1, стр. 2–10, Британское компьютерное общество, апрель 1958 г.
  72. ^ Перейти обратно: а б с д Это Уилсон, Грегори В. (1994). «История развития параллельных вычислений» . Технологический институт Вирджинии/Государственный университет Норфолка, Интерактивное обучение с цифровой библиотекой в ​​области компьютерных наук . Проверено 8 января 2008 г.
  73. ^ Антес, Гри (19 ноября 2001 г.). «Сила параллелизма» . Компьютерный мир . Архивировано из оригинала 31 января 2008 года . Проверено 8 января 2008 г.
  74. ^ Паттерсон и Хеннесси, с. 749.
  75. ^ Мински, Марвин (1986). Общество разума . Нью-Йорк: Саймон и Шустер. стр. 17 . ISBN  978-0-671-60740-1 .
  76. ^ Мински, Марвин (1986). Общество разума . Нью-Йорк: Саймон и Шустер. стр. 29 . ISBN  978-0-671-60740-1 .
  77. ^ Блейксли, Томас (1996). За пределами Сознательного Разума. Раскрытие секретов себя . Спрингер. стр. 6–7 . ISBN  9780306452628 .
  78. ^ Газзанига, Майкл ; Леду, Джозеф (1978). Интегрированный разум . стр. 132–161.
  79. ^ Газзанига, Майкл (1985). Социальный мозг. Открытие сетей разума . Основные книги. стр. 77–79 . ISBN  9780465078509 .
  80. ^ Орнштейн, Роберт (1992). Эволюция сознания: истоки нашего мышления . стр. 2 .
  81. ^ Хилгард, Эрнест (1977). Разделенное сознание: множественный контроль над человеческими мыслями и действиями . Нью-Йорк: Уайли. ISBN  978-0-471-39602-4 .
  82. ^ Хилгард, Эрнест (1986). Разделенное сознание: множественное управление человеческими мыслями и действиями (расширенное издание) . Нью-Йорк: Уайли. ISBN  978-0-471-80572-4 .
  83. ^ Каку, Мичио (2014). Будущее разума .
  84. ^ Успенский, Петр (1992). "Глава 3". В поисках чудесного. Фрагменты неизвестного учения . стр. 72–83.
  85. ^ «Официальный сайт нейрокластерных моделей мозга» . Проверено 22 июля 2017 г.

Дальнейшее чтение [ править ]

  • Родригес, К.; Вильягра, М.; Баран, Б. (29 августа 2008 г.). «Асинхронные командные алгоритмы для логической выполнимости». Биомодели сетевых, информационных и вычислительных систем, 2007. Бионетика, 2007. 2-е : 66–69. дои : 10.1109/BIMNICS.2007.4610083 . S2CID   15185219 .
  • Сечин А.; Параллельные вычисления в фотограмметрии. ГИМ Интернешнл. № 1, 2016, стр. 21–23.

Внешние ссылки [ править ]

Послушайте эту статью ( 54 минуты )
Продолжительность: 54 минуты 16 секунд.
Разговорная иконка Википедии
Этот аудиофайл был создан на основе редакции этой статьи от 21 августа 2013 г. ( 21 августа 2013 г. ) и не отражает последующие изменения.