#caching #memory #operating-system
Вопрос:
В настоящее время я пытаюсь понять концепцию истинного обмена.
Я наткнулся на следующий ресурс, который объясняет, что такое истинные промахи в кэше общего доступа:
Истинные промахи в кэше общего доступа возникают всякий раз, когда два процессора обращаются к одному и тому же слову данных. Для истинного совместного использования требуется, чтобы задействованные процессоры явно синхронизировались друг с другом для обеспечения корректности программы. Считается, что вычисление имеет временную локальность, если оно повторно использует большую часть данных, к которым оно получало доступ; программы с высокой временной локальностью, как правило, имеют менее достоверный общий доступ. Объем истинного совместного использования в программе является критическим фактором производительности на многопроцессорах; высокие уровни истинного совместного использования и синхронизации могут легко превзойти преимущество параллелизма.
Источник: https://suif.stanford.edu/papers/anderson95/node2.html
Часть, которая меня смущает, заключается в следующем:
…программы с высокой временной локализацией, как правило, имеют менее реальный общий доступ.
Почему программы с высокой временной локальностью имеют меньше истинных пропусков общего кэша?
Во всяком случае, я бы подумал, что программы с высокой временной локальностью с большей вероятностью будут иметь истинные промахи общего кэша.
Например, как я понимаю, следующий фрагмент псевдокода имеет высокую временную локальность в том смысле, что я ссылаюсь на одну и ту же переменную sum
в каждой итерации моего цикла.
int sum = 0
for (i = 0; i < n; i ) {
sum = 1;
}
Однако, если бы у меня был второй процесс, который также требует доступа к sum
переменной (по любой причине), каждая итерация цикла (в первый мой процесс) может привести к аннулированию кэша используется этот второй процесс, в результате совместного использования кэша при каждой итерации цикла в мой первый процесс (который плохо сказывается на производительности).
Разве я только что не продемонстрировал программу, которая имеет высокую временную локальность и большое количество истинных пропусков общего кэша?