Теоретические сведения о технологии OpenMP
Таблица 1.2. — Зависимости коэффициента ускорения времени выполнения от количества элементов в массиве и количества процессов. Omp_get_max_threads () — возвращает максимально допустимое число нитей для использования в следующей параллельной области. Директива parallel указывает, что структурный блок кода должен быть выполнен параллельно в несколько потоков. Omp_set_num_threads () — устанавливает… Читать ещё >
Теоретические сведения о технологии OpenMP (реферат, курсовая, диплом, контрольная)
OpenMP — это набор директив компилятора, библиотечных процедур и переменных окружения, которые предназначены для программирования многопоточных приложений на многопроцессорных системах с единой памятью.
Подробно со всеми директивами и их спецификациями можно ознакомиться в опубликованном стандарте OpenMP, сопроводительной документации к вашему компилятору, а также в учебном пособии Антонова А. С. «Параллельное программирование с использованием технологии OpenMP».
Разработка программы
В данной программе использовались следующие элементы OMP:
omp_get_max_threads () — возвращает максимально допустимое число нитей для использования в следующей параллельной области.
omp_set_num_threads () — устанавливает количество потоков в последующих параллельных областях.
#pragma omp parallel for reduction (*:mul).
Директива parallel указывает, что структурный блок кода должен быть выполнен параллельно в несколько потоков.
Директива for сообщает, что при выполнении цикла for в параллельном регионе Директива reduction (оператор: список переменных) указывает, что над одной или несколькими переменными, которые являются приватными в каждом потоке необходимо выполнить оператор. Оператором может быть сложение, вычитание, умножение и т. д.
Конфигурация ПК:
Процессор: AMD A10−574M;
ОЗУ: 6 Гб;
ОС: Windows 10.
Вычислительный эксперимент
В ходе разработки были написаны две программы: тестовая и рабочая. В тестовой программе пользователь сам вводит количество элементов в векторе и сами элементы. В рабочей версии пользователь определяет только размер вектора.
Основное предназначение тестовой версии программы показать правильность вычислений.
В рабочей программе (далее программе) было замерено время выполнения, не учитывая время на выделение памяти под вектор, заполнение вектора и освобождение памяти. Всё время в данной таблице и последующих измеряется в милисекундах.
Таблица 1.1. — Зависимость времени выполнения от количества элементов в массиве.
0,001. | 0,001. | 0,009. | 0,076. | 0,741. | |
0,002. | 0,001. | 0,005. | 0,039. | 0,393. | |
0,004. | 0,002. | 0,004. | 0,028. | 0,274. | |
0,005. | 0,003. | 0,008. | 0,024. | 0,218. |
Таблица 1.2. — Зависимости коэффициента ускорения времени выполнения от количества элементов в массиве и количества процессов.
0,5. | 1,8. | 1,9 487 179 487. | 1,8 974 358 974. | ||
0,25. | 0,5. | 2,25. | 2,7 142 857 143. | 2,700 729 927. | |
0,2. | 0,3 333 333. | 1,125. | 3,1 666 666 667. | 3,3 944 954 128. |
Представим таблицу 1.2 в виде графиков. Результат представлен на рисунке 1.1.
Выводы по главе
При рассмотрении графика на рисунке 1.1 видно, что распараллеливание на малых размеров векторах (10 000, 100 000) нецелесообразно и ведет к увеличению времени работы программы. Это объясняется добавлением времени на создание потоков и дополнительной обработкой данных. Но распараллеливание большой размерности векторов (10 000 000, 100 000 000) целесообразно. Время при распараллеливании намного меньше, чем последовательное выполнение программы, не смотря на то, что во время входит работа по созданию дополнительных потоков и обработка данных.
Обобщив, можно сказать, что выполнение параллельных вычислений обосновано только при наличии большого объёма данных и возможности распараллелить алгоритм. При небольших объёмах данных выполнение без распараллеливания по времени превосходит выполнение с распараллеливанием.