Настройка обмена кэшем L2 между ядрами - PullRequest
1 голос
/ 16 марта 2020

Я пытаюсь создать многопроцессорную многопроцессорную конструкцию, в которой кэши L2 являются частными для каждого чипа. Например, я пытаюсь создать следующую конфигурацию:

  • 2 чипа, каждый из которых содержит 2 ядра ЦП
  • Каждый чип имеет 2 ядра ЦП (каждый из которых имеет свой собственный кэш L1) и один Кэш-память L2, совместно используемая двумя процессорами
  • Наконец, у меня будет основная память, разделенная между двумя чипами

Я использую протокол MOESI_CMP_directory для создания проекта , И я использую garnet2.0 для создания топологии. Но я понял, что все 4 процессора совместно используют два L2-кэша. Но я хочу, чтобы L2-кэш был закрыт для каждого чипа. Есть ли способ сделать это в gem5?

Дополнительная информация:

Я проверил адреса памяти и получил доступ к кэшам через RubyNetwork, чтобы убедиться, что L1-Cache0 обращается к L2-Cache0, а также к L2- кэш1. Кажется, что протокол работает правильно, потому что кэш L2, являющийся кэшем последнего уровня, используется совместно. Но мне было интересно, смогу ли я сделать некоторые настройки так, чтобы L1-Cache0 / 1 запрашивал только go для L2-Cache0, а не для L2-Cache1.

1 Ответ

0 голосов
/ 19 марта 2020

Я думаю, что знаю, как решить эту проблему. Для этого необходимо изменить два файла:

  1. src / mem / ruby ​​/ protocol / MESI_Two_Level-L1Cache.sm - в этом файле отправляются связные сообщения из L1Cache через "действия". Функция, которая управляет отображением, относительно которого узел L2Cache получает согласованный запрос, является «mapAddressToRange». Эта функция передает определенные параметры в файл .sm и может быть изменена.
  2. src / mem / ruby ​​/ slicc_interface / RubySlicc_ComponentMapping.hh - этот файл содержит реализацию функций "mapAddressToRange "и мы можем внести изменения здесь в соответствии с нашим требованием.
...