Мультипроцессоры CC-NUMA

Рассмотрим широко распространенный способ построения больших мультипроцессоров CC-NUMA (Cache Coherent NUMA – NUMA с согласованной кэш-памятью) на основе каталога. Каталог представляет собой базу данных, которая содержит информацию о том, где именно находится каждая строка кэш-памяти и каково ее состояние (см. рис. 18.9). При каждом обращении к кэш-памяти все необходимые данные о затребованной строке выводятся из базы данных. Для взаимодействия с базой данных используются высокоскоростные аппаратные средства, способные выдавать ответ на запрос за долю цикла шины.

Состав. Для понимания сути и особенностей мультипроцессоров на основе каталога рассмотрим систему (рис. 18.9) из 256 процессорных блоков, которые связаны через сеть межсоединений в виде решетки, гиперкуба или другой топологии. Каждый процессорный блок состоит из процессорного элемента ПЭ, модуля памяти МП, связанного с ПЭ через локальную шину, контроллера и каталога. Модуль памяти размером 224 = 16М байт используется в качестве кэша, содержащего 218 строк по 64 байта каждая. Таким образом, общий объем памяти ОЗУ, составляющий 256×224 = 232 байта, разделен на 226 строк

Мультипроцессор CC-NUMA

Рис. 18.9. Мультипроцессор CC-NUMA

кэш-памяти по 26 (64) байта каждая. Каталог каждого процессорного блока содержит 218 элементов длиной в 9 бит с записями для каждой строки кэша, т.е. объем памяти каталога равен 9×218 бит, что составляет 1,76% от объема памяти одного процессорного блока.

Принцип работы. Рассмотрим, как работает мультипроцессор на основе каталога, предполагая, что:

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

В этом случае выполняется следующая последовательность действий:

  • • процессорный блок (исходный узел А1) передает команду load в контроллер;
  • • контроллер переводит команду в физический адрес, разделяя его на три части – адресуемый узел А2 (8 бит), адресуемая строка S1 (18 бит) и смещение С (6 бит);
  • • поскольку в исходном узле А1 строка отсутствует, то узлу А2 через сеть направляется запрос;
  • • запрос поступает в каталог, аппаратные средства которого индексируют таблицу из 218 элементов;
  • • если строка S1 отсутствует в кэш-памяти, то аппаратное обеспечение вызывает строку S1 из локального ОЗУ, отправляет в исходный узел А1 и обновляет элемент каталога S1, чтобы показать, что эта строка находится в кэш-памяти узла А1.

Рассмотрим другую ситуацию, когда из узла А1 запрашивается строка S2, а в каталоге узла А2 указано, что строка S2 находится в кэш-памяти узла А3. В этом случае выполняются следующие действия:

  • • из узла А2 посылается сообщение в узел А3, чтобы строка S2 из него была передана в узел А1;
  • • затребованная строка S2 передается в А1;
  • • строка S2 в кэш-памяти узла А3 объявляется недействительной;
  • • обновляется элемент каталога S2 узла А3, чтобы зафиксировать, что строка уже находится в узле А1.

Недостатком рассмотренного мультипроцессора является то, что строка может быть кэширована только в одном процессорном блоке (узле). Для его устранения предлагается [16]:

  • • предоставить каждому элементу каталога k полей для определения других процессорных блоков;
  • • заменить номер процессорного блока битовым отображением: один бит на процессорный блок;
  • • хранить в каждом элементе каталога 8-битное поле, чтобы связать все копии строки всех кэшей.

На практике используются все три возможности, хотя каждая из них имеет свои достоинства и недостатки.

Контроль состояния строк кэш-памяти и операции с обновленными строками. Запрос на считывание строки кэш-памяти, которая не изменилась, может быть удовлетворен из основной памяти, поэтому его можно не направлять в кэш-память.

Запрос на считывание строки кэш-памяти, которая была изменена, направляется в тот процессорный блок (узел), в котором находится ее действительная копия. Если разрешается иметь только одну копию строки кэш-памяти, то отсутствует необходимость в отслеживании изменений в строках кэш-памяти. Это обусловлено тем, что любой новый запрос должен пересылаться к существующей копии, чтобы объявить ее недействительной.

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

 
< Пред   СОДЕРЖАНИЕ     След >