Цель работы:
Научиться использовать OpenMP для разработки параллельных программ и распараллеливания уже написанных программ. Стандарт OpenMP предназначен для параллельного программирования для систем с общей памятью. Управление параллелизмом явно задается программистом соответствующими директивами препроцессора.
Задание на работу:
Вычислить a/(*)*, используя метод прямоугольников. Входные данные: числа a и b, функция f(x) определяется с помощью программной функции. При суммировании использовать принцип дихотомии.
Ход работы:
1. Ознакомиться с теоретическими сведениями.
2. Создать и откомпилировать простое приложение в среде OpenMP (пример № 1). Доработать его следующим образом:
1) перед запуском параллельных нитей приложение должно определять максимально возможное количество нитей, которое одновременно может работать в системе;
2) если максимальное количество нитей меньше четырех, то параллельная секция должна выполняться с максимальным количеством нитей, иначе установить количество нитей для параллельной секции равным 4;
3) синхронизировать вывод потоков, чтобы доступ к окну консоли был исключающим.
3. Разработать алгоритм решения задания.
4. Реализовать алгоритм в последовательной программе.
5. Распараллелить программу при помощи директив OpenMP, откомпилировать и отладить в среде OpenMP.
6. Запустить программу с использованием OpenMP для различных наборов входных данных. Отметить, если есть ошибки в работе программы.
7. Запустить программу с отладчиком Intel Thread Checker. Составить список потенциально проблемных мест и ошибок при синхронизации нескольких потоков.
8. Устранить ошибки в программе.
9. Вновь запустить Intel Thread Checker и убедиться в правильности работы программы.
10. Составить схему потоков.
11. Оформить отчет.
12. Ответить на контрольные вопросы, заданные преподавателем