Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VOPROSY_Kolesnikov.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
613.39 Кб
Скачать
  1. Функції omp_get_thread_num() та omp_get_num _thread(). Призначення, опції, приклади застосування

Функция omp_get_num_threads

Возвращает число нитей в группе выполняющих параллельную работу на момент обращения к функции (аналог MPI_Comm_size(…)).

int omp_get_num_threads(void)

Если число нитей явным образом не установлено пользователем (ф-ция omp_set_num_threads или пер-ная OMP_NUM_THREADS), то по умолчанию устанавливается значение, определяемое конкретной реализацией. Эта функция возвращает значение числа нитей ближайшей к вызову параллельной области программы. Если вызов осуществляется из последовательной части программы или вложенной параллельной области, которая выполняется последовательно, то функция возвращает значение равное 1.

Функция omp_get_thread_num

Возвращает номер нити, которая вызвала эту функцию в группе. Номер нити располагается между 0 и значением функции omp_get_num_threads()–1 включительно. Основная нить группы всегда имеет номер 0.

int omp_get_thread_num(void);

Если функция вызывается из последовательной области, то вызов функции omp_get_num_threads() возвращает 0.

Используя функцию omp_get_thread_num можно распределить работу между нитями. Например:

if (omp_get_thread_num() == 3 )

< код для нити с номером 3 >

else < код для всех остальных нитей >

часть программы в if будет выполнена только нитью с номером 3, а часть else - всеми остальными.

  1. Колективні операції з взаємодії процесів у mpi програмах

В операциях коллективного взаимодействия процессов участвуют все процессы коммуникатора. Соответствующая процедура должна быть вызвана каждым процессом, быть может, со своим набором параметров. Возврат из процедуры коллективного взаимодействия может произойти в тот момент, когда участие процесса в данной операции уже закончено. Как и для блокирующих процедур, возврат означает то, что разрешен свободный доступ к буферу приема или посылки. Асинхронных коллективных операций в MPI нет.

В коллективных операциях можно использовать те же коммуникаторы, что и были использованы для операций типа точка-точка. MPI гарантирует, что сообщения, вызванные коллективными операциями, никак не повлияют на выполнение других операций и не пересекутся с сообщениями, появившимися в результате индивидуального взаимодействия процессов.

Вообще говоря, нельзя рассчитывать на синхронизацию процессов с помощью коллективных операций (кроме процедуры MPI_BARRIER). ЕСЛИ какой-то процесс завершил свое участие в коллективной операции, то это не означает ни того, что данная операция завершена другими процессами коммуникатора, ни даже того, что она ими начата (если это возможно по смыслу операции).

В коллективных операциях не используются идентификаторы сообщений (теги). Таким образом, коллективные операции строго упорядочены согласно их появлению в тексте программы.

МРI_BARRIER(COMM, IERR) INTEGER COMM, IERR

Процедура используется для барьерной синхронизации процессов. Работа процессов блокируется до тех пор, пока все оставшиеся процессы коммуникатора сомм не выполнят эту процедуру. Только после того, как последний процесс коммуникатора выполнит данную процедуру, все процессы будут разблокированы и продолжат выполнение дальше. Данная процедура является коллективной. Все процессы должны вызвать MPI_BARRIER, хотя реально исполненные вызовы различными процессамикоммуникатора могут быть расположены в разных местах программы.

Набор коллективных операций включает:

  • Синхронизацию всех процессов с помощью барьеров (MPI_Barrier);

  • Коллективные коммуникационные операции, в число которых входят:

    • рассылка информации от одного процесса всем остальным членам некоторой области связи (MPI_Bcast);

    • сборка (gather) распределенного по процессам массива в один массив с сохранением его в адресном пространстве выделенного (root) процесса (MPI_Gather, MPI_Gatherv)

    • сборка (gather) распределенного массива в один массив с рассылкой его всем процессам некоторой области связи (MPI_Allgather, MPI_Allgatherv)

    • разбиение массива и рассылка его фрагментов (scatter) всем процессам области связи (MPI_Scatter, MPI_Scatterv);

    • совмещенная операция Scatter/Gather (All-to-All), каждый процесс делит данные из своего буфера передачи и разбрасывает фрагменты всем остальным процессам, одновременно собирая фрагменты, посланные другими процессами в свой буфер приема (MPI_Alltoall, MPI_Alltoallv).

Глобальные вычислительные операции (sum, min, max и др.) над данными, расположенными в адресных пространствах различных процессов:

    • с сохранением результата в адресном пространстве одного процесса (MPI_Reduce);

    • с рассылкой результата всем процессам (MPI_Allreduce);

    • совмещенная операция Reduce/Scatter (MPI_Reduce_scatter);

    • префиксная редукция (MPI_Scan);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]