Простая программа на Ассемблере "длина строки кэш"
Программа на Ассемблере в самом упрощенном виде. Ввод на экран одно числовое значение и выход.
Необходимо определить длину строки кэш процессора данной машины (на которой запустили).
Алгоритм:
1. Создаем массив заведомо больший строки кэш, например 1024
2. В цикле обращаемся побайтно к элементам созданного массива.
3. На каждой итерации цикла:
- инкремент счетчика;
- обращение к следующему элементу из массива;
- определение времени этого обращения;
- сравнение этого обращения с предыдущим, если оно на порядок больше выход из цикла.
4. вывод значения счетчика на экран
5. выход.
Как работает на примере:
1.Массив создается в область данных
2. Считывается в L2 кэш порциями, каждя порция длинной в искомую длинну строки кэш.
3. Считываем первый элемент в L2 попадает например 32 байта (длина строки данного процессора)
4. После того как считали все 32 байта, считываем 33 ий, которого нет в L2, следовательно срабатыват опять заполнение L2 строки
следующими 32 байтами из области данных с 33 по 64 байт. в этот момент на операцию уходит намного большее время чем напрямую
из L2. Этот провал и считаем ключом для выхода из цикла. И счетчик итераций будет ответом тоесть 32.
5. Вывод на экран:
32
6. Выход.
Необходим ASM исходник, можно и даже желательно чтоб собирался под LINUX, но не принципиально, как удобно.