Пусть в то время как все это происходит, процессор 001 тоже решает записать слово в модуль памяти 001. Здесь происходит аналогичный процесс. Сообщение отправляется через верхний, верхний и нижний выходы соответственно. На рис. 8.25 этот путь отмечен буквой Ъ. Когда сообщение прибывает в пункт назначения, в его поле модуля содержится последовательность 001, показывая путь, который прошло сообщение. Поскольку эти два запроса проходят через разные коммутаторы, линии и модули памяти, они могут выполняться параллельно.
А теперь посмотрим, что произошло бы, если бы процессору 000 понадобился доступ к модулю памяти 000. Его запрос вступил бы в конфликт с запросом процессора 001 на коммутаторе ЗА, и одному из них пришлось бы ждать. То есть, в отличие от сети с перекрестной коммутацией, сеть omega — это блокирующая сеть. Одновременно может передаваться не всякий набор запросов. Конфликты могут возникать как между запросами (при использовании одной и той же линии или одного и того же коммутатора), так и между запросами (к памяти) и ответами (из памяти).
Совершенно очевидно, что обращения к памяти желательно равномерно распределять по модулям памяти. Один из возможных способов — использовать младшие биты в качестве номера модуля. Рассмотрим адресное пространство с побайтовой адресацией для компьютера, которому в основном требуется доступ к 32-разрядным словам. Два младших бита обычно равны 00, но следующие три
бита распределяются равномерно. Если задействовать эти три бита в качестве номера модуля памяти, последовательно адресуемые слова оказываются в последовательно расположенных модулях. Система памяти, в которой последовательные слова находятся в разных модулях памяти, называется расслоенной. Расслоенная память доводит параллелизм до абсолюта, поскольку большая часть обращений к памяти — это обращения по последовательным адресам. Возможна также разработка неблокирующих сетей, в которых для оптимизации трафика предлагаются несколько путей от каждого процессора к каждому модулю памяти.
N U MA- мул ьти п роцессоры
Количество процессоров в UMA-мультипроцессорах с одной шиной обычно ограничивается несколькими десятками, а для мультипроцессоров с перекрестной или многоступенчатой коммутацией требуется дорогое оборудованияе, к тому же количество процессоров в них не намного больше. Чтобы объединить в одном мультипроцессоре более 100 процессоров, нужно какое-то иное решение. Ранее предполагалось, что все модули памяти имеют одинаковое время доступа. Если не замыкаться на этой концепции, можно прийти к мультипроцессорам с неоднородным доступом к памяти (Nonuniform Memory Access, NUMA). Как и UMA-мультипроцессоры, они предоставляют единое адресное пространство для всех процессоров, но, в отличие от UMA-машин, доступ к локальным модулям памяти происходит быстрее, чем к удаленным. Следовательно, все UMA-программы смогут без изменений работать на NUMA-машинах, но производительность будет хуже, чем на UMA-машине с той же тактовой частотой.
NUMA-машины имеют три ключевые характеристики, которые в совокупности отличают их от других мультипроцессоров: