Программа на Ассемблере в самом упрощенном виде. Ввод на экран одно числовое значение и выход.

Необходимо определить длину строки кэш процессора данной машины (на которой запустили).

Алгоритм:

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, но не принципиально, как удобно.

15 лет назад
sirop
Иван 
43 года
18 лет в сервисе
Был
4 года назад

Заявки фрилансеров

Нет заявок фрилансеров