Многопроцессорные системы неоднократно пытались классифицировать, но ни одна из моделей не получила широкого распространения. Будем называть мультипроцессорными системы, в которых процессоры работают с общей памятью, а мультикомпьютерными - системы, в которых у каждого процессора есть своя собственная память. Таким образом, в мультипроцессорных системах все процессоры используют единое адресное пространство. Поэтому если один процессор записал в ячейку памяти с номером 256 значение 1003, то другой процессор прочтет из ячейки с номером 256 число 1003.
Мультипроцессорные системы строятся, как правило, из процессоров одного типа. Основная проблема при построении мультипроцессорной системы – организация совместного доступа к блокам памяти. Возможны две схемы организации: шинная и коммутируемая, причем коммутируемые схемы делятся в свою очередь на коммутационную решетку и омега-сеть.
Основная проблема при таком доступе к памяти – низкая скорость. Но так построенная память называется согласованной. С целью повысить скорость работы системы применяется между процессором и оперативной памятью высокоскоростная кэш-память. Но наличие кэш приводит к несогласованности. Очевидно, что программирование в таких условиях осложняется за счет того, что программисту следует следить за своевременной выгрузкой данных из кэш в оперативную память (перед тем, как этими данными захочет воспользоваться другой процессор). На рисунке процессоры обозначены буквами Р, а блоки памяти – буквами М.
P1 | Ш | M1 | |
P2 | И | M2 | |
P3 | Н | M3 | |
P4 | А | M4 |
Рисунок 4 – Шинная схема SMP
Коммутационная решетка представляет собой набор скоростных узловых коммутаторов. Преимущество коммутационной решетки состоит в том, что возможен одновременный доступ к различным модулям памяти.
P1 | M1 | M2 | M3 | M4 |
P2 | ||||
P3 | ||||
P4 |
Рисунок 5 – Коммутационная схема SMP
Для осуществления доступа некоторого процессора к заданному блоку памяти требуется установить соединение на одном узловом коммутаторе, находящемся на пересечении линии связи, идущей от процессора, и линии связи, идущей от блока памяти. Недостаток коммутационной решетки в том, что ее сложность, то есть количество узловых коммутаторов пропорционально произведению количества входных портов на количество выходных. Для соединения 4 процессоров (входы от процессоров обозначены, как P) с 4 блоками памяти (входы от них обозначены, как M) потребуется коммутатор с 16 узловыми коммутаторами, обозначенными на рисунке кружочками. Для суперкомпьютера с 7200 процессорами и приблизительно с таким же количеством блоков памяти потребовалась бы коммутационная решетка с 50 000 000 узловых коммутаторов. Трудно себе представить даже размер такого устройства. И совершенно очевидно, что даже вследствие его большого размера невозможно обеспечить высокую скорость работы.
Омега сеть – это сеть коммутаторов с фиксированным небольшим количеством портов. На рисунке изображена омега-сеть для четырех процессоров и четырех блоков памяти. Количество внутренних узловых коммутаторов в этой схеме значительно ниже: всего четыре против шестнадцати. Но время доступа процессора к оперативной памяти несколько больше: во-первых, связь осуществляется через два узловых коммутатора, а не через один, как в коммутационной решетке. Во-вторых, в омега-сети на обоих узловых коммутаторах по пути к памяти возможны конфликты одновременных запросов, причем даже если соперник обращается к другому блоку памяти. Тогда как в коммутационной решетке конфликт возникает только при одновременном доступе к одному и тому же блоку памяти.
P1 | M1 | ||||
P2 | М2 | ||||
P3 | М3 | ||||
P4 | М4 |
Рисунок 6 – Связь типа «Омега-сеть»
Для построения омега-сети, реализующей доступ к большему количеству блоков памяти, но использующей четырехпортовые узловые коммутаторы, потребуется расположить их в три и более слоев.