Автор статьи
Валерия
Эксперт по сдаче вступительных испытаний в ВУЗах
- Научиться измерять интервалы времени в программах на языке C.
- Исследовать влияние кэш-памяти на время работы программ обработки данных.
- Исследовать влияние порядка обработки данных в памяти на время работы программы.
- Экспериментально определить основные параметры кэш-памяти (объем, размер строки и т.д.)
- Разработать программу на языке C, которая позволяет экспериментально определить объем кэш-памяти.
- Разработать программу на языке C, которая позволяет экспериментально определить размер строки кэш-памяти.
- Разработать программу на языке C, которая позволяет экспериментально определить ассоциативность кэш-памяти.
- По результатам тестирования формулируются рекомендации для эффективного программирования.
- Изучить утилиту ОС Linux (time) и функции ANSI C (gettimeofday), ОС Linux (clock_gettime, sysconf и times), которые используются для измерения интервалов времени. Изучить команду процессора x86 (RDTSC), которая позволяет подсчитывать число тактов процессорного времени с момента его перезапуска. Изучить синтаксис ассемблерных вставок в программах на языке C для компилятора GNU C/C++.
- Ознакомиться с примерами программ, содержащих код для измерения времени всеми основными способами, используемыми в ОС Linux на машинах с архитектурой x86. (примеры даются преподавателем в начале лабораторной работы).
- Реализовать программу, измеряющую время многократного обхода элементов массива в некотором заданном как параметр порядок обхода (прямом, обратном и случайном).
- Измерить время исполнения программы обхода при разных размерах массива (от 1КБ до размера, гарантированно превышающего размер кэш-памяти). Построить график функции зависимости времени исполнения от размера массива каждого порядка обхода. При большом разбросе соседних значений полученной функции, построить измерения, сделав замер времени (для каждого размера массива) несколько раз и выбрать минимальное получившееся (для данного размера массива) время исполнения.
- На основе полученных данных определить размер кэш-памяти и сделать вывод о том, какой обход более эффективен по времени исполнения программы.
- Реализовать программу многократного обхода массива, разбитого на блоки одинакового размера. Размер массива должен быть существенно больше объема исследуемого уровня кэш-памяти. Обход производится поблочно. Порядок выбора блоков – случайный. При обработке блока, обращение к его элементам – последовательное, от первого и до последнего элемента блока.
- Измерить время исполнения программы в зависимости от размера блока, начиная с одного машинного слова и заканчивая размером, заведомо превышающим размер строки кэш-памяти. Построить график функции времени исполнения от размера блока. По полученному графику определить размер строк кэш-памяти.
- Реализовать программу обхода массива, разбитого на N блоков данных суммарным объемом BlockSize, отстоящих друг от друга на величину Offset.
BlockSize — размер обходимого блока данных,
Offset — расстояние между началами соседних блоков.
N — число фрагментов (на картинке N = 4).
Обход элементов следует производить в порядке, указанном на рис. 2.
BlockSize должен быть не больше объема исследуемого уровня кэш-памяти. Offset должно быть кратно величине <размер кэша> / <ассоциативность>, т.е. кратно размеру банка кэша. Как правило, это степени двоек, так что можно взять заведомо кратное такому значению расстояние (например, 1MB). Изменяя число частей N, мы увидим, как меняется время обхода. Когда N превысит число банков, время обхода сильно возрастет. Элементы массива представляют собой связный список указанного выше вида, в котором значение очередного элемента представляет собой номер следующего.
Параметры обхода:
BlockSize = размер кэша данных 1 уровня,
Offset = 1 MB.
Число фрагментов N = 1…20.
- Измерить время исполнения программы в зависимости от количества фрагментов. Построить график функции времени исполнения от количества фрагментов. По полученному графику определить степень ассоциативности кэш-памяти.
О сайте
Ссылка на первоисточник:
https://www.srttc.ru/
Поделитесь в соцсетях: