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

В МВК «Эльбрус» простое решение пришло на основании анализа языков высокого уровня (АЛГОЛ-68, А ДА, ПЛ/1 и др.) и методов программирования параллельных вычислений. В настоящее время хорошо известно, что при работе с общими данными для обеспечения удобства программирования необходимо использовать специального рода структурные скобки (критические секции, скобки мгновенности и т. д.), охраняемые специальными семафорами.

Семафоры использованы в МВК «Эльбрус» как самое простое решение проблемы.

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

Обнуление особенно облегчено в МВК «Эльбрус» благодаря разбиению кэш-памяти на четыре функциональные области. Буфер команд нет необходимости обнулять, так как в нем находится постоянная информация. Буфер стека можно не обнулять, так как локальные данные процесса, общие с другим процессом, перемещаются из буфера стека в память. Буфер массивов, как правило, бывает пустой во время семафорной синхронизации. Таким образом, единственно, что требует эффективного обнуления — это память глобалов (АЗУГ). В результате для решения проблемы когерентности кэш-памяти в МВК «Эльбрус» нет необходимости выполнять лишнюю работу. Именно поэтому вычислительная машина «Эльбрус» в архитектурном отношении является предельно быстродействующей и одновременно многопроцессорной, т. е. содержащей несколько процессоров, работающих на общую память.