Классификация Флинна
Классификация Флинна рассматривает архитектуры вычислительного оборудования по признаку единичности/множественности потоков команд и данных.[1] Выделяются следующие четыре класса:
ОКОД
ОКОД (SISD – single instruction [stream], single data [stream]): обыкновенная (последовательная) вычислительная машина, т. е., машина фон Неймана. Одна команда исполняется за один раз над одним элементом данных. Сюда относятся все традиционные вычислительные машины с одним процессором и одним комплектом памяти; например, все однопроцессорные IBM PC с одноядерным процессором без конвейеризации исполнения команд.
МКОД
МКОД (MISD – multiple instruction [streams], single data [stream]); также, по конструктивному исполнению, архитектура с единообразной памятью (доступом к памяти) (UMA – unified memory access): машины с конвейерными (pipeline) архитектурами процессоров; симметричные многопроцессорные (SMP) и многоядерные (multicore) машины, многопроцессорные графические адаптеры в соответствующих режимах работы и подобные.
Следует иметь в виду, что в литературе встречается оценка этой архитектуры как «не очень полезной»; такие источники относятся к периоду, когда конструктивное исполнение МКОД было неэффективным и/или дорогим.
ОКМД
ОКМД (SIMD – single instruction [stream], multiple data [streams]): векторные машины или машины, параллельные по данным (data parallel); один и тот же набор команд выполняется над множественными различными элементами данных; структурно состоят из множественных вычисляющих устройств и центрального управляющего устройства; название «параллельный по данным» (data parallel) означает, что параллелизм проистекает из данных (присущ обрабатываемым данным).
Сопоставление команд и тех или иных элементов данных производится векторным компилятором при условии, что расчёт векторизуемый; существуют особые языки программирования, а также т.наз. диалекты языков программирования: следующий пример на High Performance Fortran (HPF) занимает (заказывает) 10 процессоров и объявляет распределение 1.000 элементов массива x – по 100 последовательных элементов на каждый процессор:
real x(1000)
!HPF$ PROCESSORS p(10)
!HPF$ DISTRIBUTE x(BLOCK) ONTO p
Сравнительно рано возникшая архитектура; класс особенно приспособлен к однообразным вычислениям, производимым в науке и производстве (напр., в обработке сигналов), которые могут быть представлены в виде векторов и матриц. Скажем, скалярное умножение вектора (матрицы) требует лишь раздельного умножения каждого элемента на некоторое число.
«Чистые» архитектуры ОКМД немногочисленны. В их числе считаются ранние векторные машины, как, например, Cray-1 и Hitachi S-3600. В наше время такая архитектура представлена векторными процессорами, а также узлами в процессорных комплектах, как, например, MMX/SSE в комплекте Intel Pentium или AltiVec в PowerPC. Сюда же относятся узлы (процессоры) обработки графики (GPU) в соответствующих режимах работы.
Любопытным воплощением этой парадигмы была Connection Machine (МИТ, ранние 1980-е гг.), имевшая тогда до 65 тыс. процессоров, каждый из которых был снабжён собственной рабочей памятью; процессоры в 1-й модели машины соединялись в гиперкуб. При работе машины команды передавались (транслировались) на процессоры, каждый из которых работал над своей частью входного массива данных.
Ограничения класса очевидны – хорошо работает не с каждым набором данных.
МКМД
МКМД (MIMD – multiple instruction [streams], multiple data [streams]), также «настоящая параллельная вычислительная машина» (true parallel computer): множественные вычисляющие устройства и множественные управляющие устройства. Соответственно, возможно выполнение различных потоков команд в отношении различных потоков данных. Выполнение общей задачи обеспечивается синхронизацией и взаимообменом данными по сети между вычислительными узлами.
Обычно в контексте параллельных вычислений сочетание вычисляющего узла и соответствующего ему узла управляющего (если такое сочетание вообще имеет смысл) называют процессором.
Архитектура МКМД может «принимать вид» ОКМД, если на всех узлах, взятых совместно, выполняется один и тот же поток команд. Такой случай имеет собственное наименование ОПМД (одна программа, много данных или SPMD – single program, multiple data [streams]). Вообще, выполнение одной и той же программы на совокупности выч. узлов не есть то же самое, что выполнение на каждом из них одного и того же потока команд, потому что различные части программы выполняются на различных узлах.
К этому классу относятся (вычислительные) кластеры и грид-сети в режиме распределённого счёта (обработки).
Смешанные
Также архитектура распределённой системы может быть смешанной, как, напр., в случае Cray J90 или NEC SX-6, которые включают множественные векторные процессоры, и которые по Флинну могут считаться имеющими архитектуру МКМД с включениями архитектуры ОКМД. Наиболее полезными для параллельных вычислений считаются классы ОКМД (SIMD) и МКМД (MIMD).
Терминология
Следует иметь в виду, что области параллельных вычислений и смежных тем присущи использование жаргона и близких по смыслу понятий, а также не вполне правильное использование терминологии, что может создавать сложности при общении, переводе и т.д.[2] Так, например, «многонитевость» (multi-threading) может называться «параллельность с разделяемой памятью», а «многопроцессорность» (multi-processing) — «распределённая параллельность».
— Ю.Т.
- Ссылки и замечания
- ↑ Flynn 1972.
- ↑ Отмечено, напр., в: Parallel Programming and Cluster Computing: Distributed Multiprocessing. SC09 Education Program. University of Oklahoma, Aug 9-15 2009.
Источники
- Some computer organizations and their effectiveness / M.J. Flynn // IEEE Trans. Comp. – 1972. – V. C‑21, № 9. – P. 948–960.
- Sinnen. Scheduling... 2007.