Организация многопроцессорной работы. Часть 1.

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

При этом возникает проблема когерентности кэш-памяти — поддержание в процессе изменения идентичности всех территориально разнесенных копий информации.

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

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