не пойму, что делает код
int *p = (int*)malloc(MAX_BLOCK_SIZE);
int tmp = 0;
for (int b = MIN_BLOCK_SIZE; b < MAX_BLOCK_SIZE; b += STEP) {
for (int c = 0; c <= b; c += sizeof(int)) {
tmp += *(int*)((int)p + c);
*(int*)((int)p + c) = tmp;
}
}
Да, я пришел на лор со своими лабами. Нет, я не хочу, чтоб анонимус, который всем говорит, что им не быть программистами, делал мои лабы за меня. Я хочу разобраться.
MAX/MIN block size и step - это предполагаемые «размеры блока» кэша L1. Это как бы пример кода из руководства от лабы. Там написано «Для выполнения лабораторной работы вам нужно время выполнения одной итерации внутреннего цикла в зависимости от размера блока, который обрабатывается».
То есть что я получаю? На k-й итерации: размер блока min+((k-1)*step), я произвожу соответствующее количество операций записи и чтения (дальше - допустим, только записи), получаю какой-то набор чисел.
К сожалению, я не понимаю, зачем это делается. Задание такое: «исследовать скорость обработки элементов блока памяти при выполнении операций записи». При проходе во внутреннем цикле я почему-то заполняю какой-то кусок массива с каким-то шагом какими-то числами, а во внешнем цикле - просто увеличивается обрабатываемый кусок массива. Как это может продемонстрировать производительность кэша?