Рассмотрим архитектуру Intel Core 2, которая имеет следующую топологию ядра:
Socket 0: ( 0 2 4 6 )
Socket 1: ( 1 3 5 7 )
Каждое ядро имеет свой собственный кэш L1; L2 кеш группа выглядит так:
( 0 2 ) ( 4 6 ) ( 1 3 ) ( 5 7 )
1
, Я заметил, что в некоторых приложениях значение счетчика производительности L2_REJECT_BUSQ_THIS_CORE_ALL_INVALID довольно высокое. В этих приложениях пропадание кэша данных # L2 также велико. Также RESOURCE_STALLS_ROB_FULL также высока и составляет основную часть всех циклов остановки.
Правильно ли сказать, что, например, ядро 0 находит данные в L2 и пропускает их, тогда контроллер шины своего кэша L2 передает некоторые сообщения другим контроллерам шины L2, чтобы увидеть, находятся ли данные в их L2 или нет. Однако, из-за ограничения пропускной способности шины, в шине есть большой конфликт, так как очереди других шин продолжают заполняться, тогда ядро 0 должно повторно передавать сообщение поиска много раз? И если это правда, то вот почему L2_REJECT_BUSQ_THIS_CORE_ALL_INVALID так высоко? Или я переводю?
2
, Правильно ли предположить, что, если оставить в стороне эффект холодных промахов, если я выполню цикл с 100 промахами кэша данных L2 на ядре, вызвав 200 L2_REJECT_BUSQ_THIS_CORE_ALL_INVALID, затем выполняя более длинный цикл (например, с удвоенным числом итераций) с 200 потерями в кеше данных L2 приведет к 400 L2_REJECT_BUSQ_THIS_CORE_ALL_INVALID? Если нет, что может быть причиной неожиданной нелинейности?
Задача ещё не решена.
Других решений пока нет …