# #c #caching #intel #cpu-cache
Вопрос:
Я хочу отслеживать и распределять использование пространства LLC с помощью Intel RDT. Я написал программу, которая вызовет 100% — ный промах кэша, как я и ожидал. Размер LLC моей машины составляет 30,25 МБ, а размер строки кэша-64 байта. Поэтому я получаю доступ к матрице по столбцам, например:
int matrix[524288][16]; //4 byte * 524288 * 16 = 32M byte
void bad_access();
int main() {
int i = 0;
cout << sizeof(int) << endl;
while (i < 5000) {
bad_access();
i ;
}
return 0;
}
void bad_access() {
int sum = 0;
for (int j = 0; j < 16; j ) {
for (int i = 0; i < 524288; i ) {
sum = matrix[i][j];
}
}
}
Я предполагал, что вышеприведенная программа будет использовать все пространство LLC, но когда я проверил ее с помощью Intel RDT, я обнаружил, что она использует только менее 16 МБ. Мне было интересно, как это произошло.
Комментарии:
1. Почему вы изменили обратно на «размер LLC моей машины составляет 30,25 МБ»? У вас есть многосетевая машина с более чем одним кэшем L3? Но, вероятно, это просто грамматическое недоразумение, так как вы внесли такое же изменение в размер строки кэша. Все ваши строки имеют одинаковый размер, и этот один размер (единственное число) составляет 64 байта. Не «есть», вы бы сказали только, что в таком случае, как «мои личные кэши L2 для каждого ядра составляют 1 мбайт каждый». Или «Размер кэша составляет 32 кб, 256 Кб и 30,25 МБ для L1, L2 и L3».
2. Вы могли бы сказать «строки кэша составляют 64 байта», потому что тогда вы говорите о группе всех строк кэша, а не о единственном атрибуте «размер», который они все разделяют. (В любом случае, этот урок английского языка не имеет отношения к вашему вопросу, извините, я не знаю, что такое Intel RDT. Хотя мне было интересно, может ли это быть связано с адаптивной заменой в кэше L3, которую Intel делает со времен IvyBridge, чтобы уменьшить загрязнение от подобного кода, который затрагивает много памяти. blog.stuffedcow.net/2013/01/ivb-cache-replacement )
3. Уже отредактировано, большое спасибо! @PeterCordes