Почему я не могу использовать все пространство LLC, как ожидалось?

# #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