
- •Основные архитектуры параллельных компьютеров
- •Классификация архитектур вычислительных систем. (Классификация Флинна)
- •Модели параллельного программирования. Основные свойства параллельных алгоритмов
- •Модель задача-канал. Основные свойства модели "задача/канал"
- •Модель передачи сообщений
- •Модель параллелизма данных
- •Модель разделяемой памяти
- •Понятие о детерминизме программы
- •Модульность. Виды композиции модулей и/или программ
- •10. Пример параллельного алгоритма: конечные разности.
- •11. Основные этапы разработки параллельной программы.
- •12. Декомпозиция. Цели. Виды декомпозиции. Итоги этапа декомпозиции.
- •Д екомпозиция по данным
- •Ф ункциональная декомпозиция
- •13. Коммуникация. Виды коммуникаций: локальные, глобальные,динамические, асинхронные. Распределенные коммуникации ивычисления. Итоги.
- •Локальные/глобальные.
- •Синхронные/асинхронные.
- •Статические/динамические.
- •С труктурные/неструктурные.
- •16. Анализ эффективности параллельных алгоритмов. Система показателей оценки характеристик параллельной программы. Асимптотический анализ. Эффективность параллельной программы
- •Система показателей оценки характеристик
- •Соглашения о терминах
- •Принятая в mpi нотация записи
- •23. Базовые функции mpi (минимальный набор)
- •24. Библиотека mpi. Организация приема/передачи данных между отдельными процессами
- •Функции приема/передачи сообщений с блокировкой
- •Основные функции приема/передачи сообщений без блокировки
- •Совмещенные прием/передача сообщений
- •25. Библиотека mpi. Коллективные функции
- •Функции коллективного обмена данными
- •26. Библиотека mpi. Глобальные вычислительные операции над распределенными данными
- •27. Библиотека mpi. Обеспечение модульности. Коммуникаторы, группы и области связи
- •Два взаимосвязанных механизма:
- •Основные понятия (группа):
- •Основные понятия (коммуникатор):
- •28. Библиотека mpi. Проблемы использования различных типов данных. Пользовательские типы данных
- •Пользовательские типы данных:
- •Характеристики типов:
- •29. Библиотека mpi. Производные типы данных и передача упакованных данных
- •Механизмы эффективной пересылки данные разных типов:
- •Производные типы данных:
- •Характеристики типов:
- •Передача упакованных данных:
- •Технология OpenMp. Стратегия подхода.
- •Директивы OpenMp. Формат записи директив.
- •Директивы OpenMp. Области видимости директив. Типы директив.
- •Директивы OpenMp. Определение параллельной области.
- •Директивы OpenMp. Распределение вычислений по потокам.
- •Директивы OpenMp. Синхронизация.
- •Директивы OpenMp. Управление областью видимости данных.
- •37. Библиотека функций OpenMp. Функции контроля параметров среды исполнения.
- •38. Библиотека функций OpenMp. Функции синхронизации.
- •39. Технология OpenMp. Переменные среды исполнения.
Директивы OpenMp. Управление областью видимости данных.
Общие (разделяемые между потоками, shared) переменные – static переменные с областью видимости в пределах файла.
Локальные (private) данные потоков – переменные циклы.
Управление областью видимости обеспечивается при помощи параметров (clauses) директив private, firstprivate, lastprivate, shared, default, reduction, copyin, которые определяют, какие соотношения существуют между переменными последовательных и параллельных фрагментов выполняемой программы.
shared – определяет список переменных, которые будут общими для всех потоков
параллельной области; правильность использования таких переменных должна обеспечиваться программистом.
shared (list)
private – определяет список переменных, которые будут локальными для каждого потока; переменные создаются в момент формирования потоков параллельной области; начальное значение переменных является неопределенным.
private(list)
firstprivate – позволяет создать локальные переменные потоков, которые перед использованием инициализируются значениями исходных переменных.
firstprivate (list)
lastprivate - позволяет создать локальные переменные потоков, значения которых запоминаются в исходных переменных после завершения параллельной области (используются значения потока, выполнившего последнюю итерацию цикла или последнюю секцию)
lastprivate (list)
copyin - позволяет выполнить инициализацию переменных директивы threadprivate
copyin (list)
default – устанавливает область видимости переменных по умолчанию
default (shared|none)
reduction – определяет список переменных, для которых выполняется операция редукции; перед выполнением параллельной области для каждого потока создаются копии этих переменных, потоки формируют значения в своих локальных переменных и при завершении параллельной области над всеми локальными значениями выполняются необходимые операции редукции, результаты которых запоминаются в исходных (глобальных) переменных
reduction (operator: list)
Возможный формат записи выражения: x = x op expr; x = expr op x; x binop = exrp; x++,++x,x--,--x
x должна быть скалярной переменной
expr не должна ссылаться на x
op (operator) должна быть перегруженной операцией вида +,-,*,/,&,^,|,&&,||
binop должна быть перегруженной операцией вида +,-,*,/,&,^,|
37. Библиотека функций OpenMp. Функции контроля параметров среды исполнения.
Для задания переменных окружения можно воспользоваться командами операционной системы Linux или директивами OpenMP. Однако в OpenMP существует еще одна возможность задания переменных окружения: с помощью функций библиотеки runtime OpenMP. Обращение к этим функциям осуществляется непосредственно в программе и ничем не отличается от вызова обычных функций. Однако следует иметь в виду, что подобная возможность существует не во всех реализациях OpenMP.
В программах, написанных на C/C++ с использованием OpenMP, существуют следующие возможности задания переменных окружения с помощью средств библиотеки реального времени runtime OpenMP.
С помощью вызова функции
(void) omp_set_num_threads(int num_threads)
можно задать число потоков в области параллельных вычислений, т. е. определить значение переменной окружения OMP_NUM_THREADS. При завершении работы эта функция не возвращает в программу никаких значений.
Функция
int omp_get_num_threads()
напротив, возвращает в программу целочисленное значение, равное количеству параллельных потоков в текущий момент времени.
Следующая функция
int omp_get_max_threads()
возвращает в программу целочисленное значение, равное максимальному количеству параллельных потоков, которое может быть возвращено функцией omp_get_num_threads.
Для определения номера параллельного потока в текущий момент временипрограммы можно воспользоваться функцией
int_omp_get_thread_num()
Она возвращает целочисленное значение в диапазоне от 0 до OMP_NUM_THREADS-1.
Определить количество процессоров, доступных программе в текущей точке, можно с помощью функции
int omp_get_num_procs()
Следующая функция позволяет идентифицировать, в какой области программы (параллельной или последовательной) в текущий момент времени проводятся вычисления
(int/logical) omp_in_parallel()
Она возвращает значение TRUE или 1 в точке параллельной области программы и FALSE или 0 в точке последовательной области программы.
Задать или отменить динамический режим работы программы можно, воспользовавшись функцией
(void) omp_set_dynamic( TRUE | FALSE )
Для задания динамического режима следует использовать параметр TRUE, а для его отмены - параметр FALSE. При этом в списке переменных окружения определяется или удаляется переменная окружения
OMP_DYNAMIC или задается ее значение, соответственно равное TRUE или FALSE.
Следующая функция позволяет идентифицировать, какой режим работы параллельной части программы (динамический или статический) осуществляется в текущий момент времени при вызове функции
(int/logical) omp_get_dynamic()
Эта функция возвращает значение TRUE или 1, если режим динамический,и FALSE или 0 в случае статического режима.
Задать или отменить вложенный режим параллельной обработки процессов в параллельной области программы можно с помощью функции
(void) omp_set_nested( TRUE | FALSE )
Она устанавливает или отменяет вложенный режим параллельной обработки. При этом в списке переменных окружения определяется или удаляется переменная окружения OMP_NESTED либо задается ее значение, соответственно равное TRUE или FALSE.
Следующая функция позволяет идентифицировать, установлен или нет вложенный режим параллельной обработки в момент вызова функции
(int/logical) omp_get_nested()
Эта функция возвращает значение TRUE или 1 для вложенного режима параллельной обработки и значение FALSE или 0 при отсутствии такового.