SISD, MIMD, SIMD, SPMD и использование векторов

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

Можно, конечно, написать отдельные программы, работающие на разных процессорах на MIMD-компьютере и все же работающие совместно над достижением более важной, согласованной цели, но программисты обычно пишут одну программу, запускаемую на всех процессорах MIMD-компьютера, полагаясь на инструкции условных переходов, когда разные процессоры должны выполнить разные фрагменты кода. Этот стиль называется одна программа, несколько потоков данных (Single Program Multiple Data. SPMD), но он является всего лишь вполне обычным способом программирования MIMD-компьютера.

SISD – единственный поток инструкций, единственный поток данных (Single Instruction stream, Single Data stream). Одноядерный процессор.

MIMD – несколько потоков инструкций, несколько потоков данных (Multiple Instruction streams, Multiple Data streams). Мультипроцессор.

SPMD – одна программа, несколько потоков данных (Single Program Multiple Data). Обычная модель MIMD-программирования, где одна программа запускается сразу на всех процессорах.

SIMD — один поток инструкций, несколько потоков данных (Single Instruction stream, Multiple Data streams). Мультипроцессор. Одна и та же инструкция применяется к нескольким потокам данных, как в векторном или матричном процессоре.

Привести примеры компьютеров, подпадающих под категорию «несколько потоков инструкций, один поток данных» (MISD), довольно трудно, в инвертированном варианте смысла намного больше. SIMD-компьютеры работают с векторами данных. Например, одна SIM D-инструкция может сложить 64 числа, отправив 64 потока данных по адресу 64 АЛУ для формирования 64 сумм за один тактовый цикл.

Достоинства SIMD состоят в том, что все параллельные исполнительные устройства синхронизированы, и все они реагируют на одну и ту же инструкцию, которая выдается при работе одного и того же счетчика команд. С точки зрения программиста это весьма близко к уже знакомому SISD. Хотя каждое исполнительное устройство будет выполнять одну и ту же инструкцию, у каждого из них есть свои собственные регистры адресов, и поэтому у каждого устройства разные адреса данных. Таким образом, последовательное приложение могло бы быть откомпилировано для работы на последовательном оборудовании с организацией SISD или на параллельном оборудовании, имеющем организацию SIMD.

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

SIMD-система лучше всего работает с массивами в циклах for. Следовательно, чтобы параллелизм работал в SIMD, должно быть большое количество одинаковых структур данных, что называется параллелизмом на уровне данных. Самым слабым местом SIMD-системы являются инструкции case или switch, где каждое исполнительное устройство должно выполнять над своими данными разные операции, в зависимости от тех данных, которыми она располагает. Исполнительные устройства с неверными данными блокируются, чтобы устройства с приемлемыми данными могли продолжить работу. В таких ситуациях, по сути, достигается производительность, равная 1/n, где n представляет собой количество случаев неверных данных.





Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: