Организация ЭВМ и систем: Курс лекций (Позиционные системы счисления. Процессоры семейства IA-32. Лазерные принтеры), страница 34

В системах с однородным доступом к памяти каждый процессор имеет одно и то же время доступа к любому модулю памяти. Если обеспечить это технически невозможно, более быстрые обращения замедляются, чтобы соответствовать самым медленным, и программист не видит никакой разницы в обращениях к разным модулям памяти. Это и значит «однородный». Такая однородность делает производительность легко предсказуемой, а это основной фактор, необходимый для написания эффективной программы.

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

11.3.2. Системы с раздельной памятью (мультикомпьютеры)

В такой системе каждый процессор имеет свою собственную, доступную только ему память (рисунок 11.2).

Рис. 11.2. Структурная схема системы с раздельной памятью P — процессор, M — память

Системы с раздельной памятью обычно являются системами со слабой связью.

Системы с раздельной памятью делят на два класса:

—  процессоры с массовым параллелизмом (Massively Parallel Processors, MPP),

—  сети или кластеры рабочих станций  (Network or Cluster Of Work Stations , NOW or COW) — множество рабочих станций, связанных с помощью обычных технологий соединения и программно организованных как единая система.

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

Структура программного обеспечения (ПО) должна соответствовать структуре аппаратного обеспечения. Если в системе с общей памятью для взаимодействия процессоров используются операции типа «сохранить» и «загрузить», то в системе с раздельной памятью для этого используются операции типа «послать» и «получить». Поэтому ПО системы с раздельной памятью имеет более сложную структуру, чем ПО системы с общей памятью.

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

Возникает вопрос: зачем тогда вообще создавать ЭВМ с раздельной памятью? Ответ прост: гораздо проще и дешевле построить большую машину с раздельной памятью, чем с общей, при том же количестве процессоров. Более того, как указано в литературе, проще построить систему с раздельной памятью с 10 000 процессоров, чем систему с общей памятью с 1 000 процессоров.

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

11.4.  Доступ к памяти в многопроцессорных системах

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