
- •Информация об исследуемой системе
- •Эксперимент 1. Исследование расслоения динамической памяти
- •Эксперимент 2. Сравнение эффективности ссылочных и векторных структур
- •Эксперимент 3. Исследование эффективности программной предвыборки
- •Эксперимент 4. Исследование способов эффективного чтения оперативной памяти
- •Эксперимент 5. Исследование конфликтов в кэш-памяти
- •Эксперимент 6. Сравнение алгоритмов сортировки
Эксперимент 4. Исследование способов эффективного чтения оперативной памяти
Цель эксперимента: исследование возможности ускорения вычислений при использовании структур данных, оптимизирующих механизм чтения оперативной памяти.
Заданные параметры:
Размер массива – 1 М.
Число потоков данных – 32.
На рисунке 6 представлена зависимость времени работы алгоритма, использующего неоптимизированную структуру, от числа одновременно обрабатываемых массивов (красный график) и аналогичная зависимость для алгоритма, использующего оптимизированную структуру (зелёный график).
Обобщённый результат:
____________________________________________________________________________
Неоптимизированная структура обрабатывалась в 1,329084 раз дольше.
Рисунок 6 - Зависимость времени работы алгоритма от числа одновременно обрабатываемых массивов
Выводы:
При выборке из оперативной памяти происходит получения одной линейки. При этом объем востребованных данных при программировании на языках высокого уровня зачастую меньше размера линейки. Оптимизация структур данных позволяет передавать в одном пакете только востребованные данные. Это позволяет снизить количество кеш-промахов и повышает производительность системы до 2ух раз.
Эксперимент 5. Исследование конфликтов в кэш-памяти
Цель эксперимента: исследование влияния конфликтов кэш-памяти на эффективность вычислений.
Заданные параметры:
Размер банка кэш-памяти – 128 К (Объём КП / Б = 1024 К / 8 = 128 К).
Размер линейки кэш-памяти – 128 б.
Число читаемых линеек – 8.
На рисунке 7 представлена зависимость времени работы процедуры, читающей данные с конфликтами в кэш-памяти, от смещения читаемой ячейки (красный график) и аналогичная зависимость для процедуры, не вызывающей конфликтов в кэш-памяти (зелёный график).
Рисунок 7 - Зависимость времени работы процедуры от смещения читаемой ячейки
Выводы:
Конфликты в кэш-памяти возникают в случае чтения данных с шагом, кратным размеру банка памяти. В этом случае задействованным будет только один банк памяти и степень ассоциативности памяти "снижается" до 1. При этом наблюдается постоянное вытеснение данных из кэш-памяти и больший её объём остаётся незадействованным.
Эксперимент 6. Сравнение алгоритмов сортировки
Цель эксперимента: исследование способов эффективного использования памяти и выявление наиболее эффективных алгоритмов сортировки, применимых в вычислительных системах.
Заданные параметры:
Количество 64-разрядных элементов массивов – 4 М.
Шаг увеличения размера массива – 128 К.
На рисунке 8 представлена зависимость времени работы алгоритма QuickSort от числа 64-разрядных элементов сортируемого массива (фиолетовый график), аналогичная зависимость времени неоптимизированного алгоритма Radix-Counting (красный график) и аналогичная зависимость времени работы алгоритма Radix-Counting, оптимизированного под восьмипроцессорную вычислительную систему (зелёный график).
Рисунок 8 - Зависимость времени работы алгоритма от числа элементов массива
Выводы:
За счёт разной логики работы различные алгоритмы сортировки по разному используют физическую память, отчего сильно разнится время доступа к ней и время работы алгоритма соответственно. Так, Quick-Sort использует попарные сравнения, отчего увеличивается число обращений к массиву данных, а следовательно и к памяти, в связи с чем увеличивается общее время выполнения сортировки. В Radix-Counting сортировка происходит по-другому, отчего этой подобной проблемы не возникает, что снижает вычислительную сложность. Распараллеливание (см. графики) повышает производительность и без того быстрого алгоритма.