OpenMP | Введение в руководство по установке
После долгой жажды распараллеливания регулярных циклов в матрично-ориентированном численном программировании OpenMP был представлен Советом по обзору архитектуры OpenMP (ARB) в 1997 году . В последующих выпусках команда энтузиастов OpenMP добавила в него множество функций, включая распараллеливание задач, поддержку ускорителей, определяемые пользователем сокращения и многое другое. Последний выпуск OpenMP 5.0 был выпущен в ноябре 2018 года.
Открытая многопроцессорная обработка (OpenMP) - это метод распараллеливания раздела (ов) кода C / C ++ / Fortran. OpenMP также рассматривается как расширение языков C / C ++ / Fortran, добавляя к ним функции распараллеливания. В общем, OpenMP использует портативную масштабируемую модель, которая дает программистам простой и гибкий интерфейс для разработки параллельных приложений для платформ, которые варьируются от обычных настольных компьютеров до высокопроизводительных суперкомпьютеров.
РЕЗЬБА против ПРОЦЕССА
ОС создает процесс для выполнения программы с заданными ресурсами (памятью, регистрами); как правило, разные процессы не делят свою память с другим. Поток - это подмножество процесса, и он разделяет ресурсы своего родительского процесса, но имеет свой собственный стек для отслеживания вызовов функций. Несколько потоков процесса будут иметь доступ к одной и той же памяти.
Архитектуры параллельной памяти
Прежде чем углубляться в OpenMP, давайте возродим основные архитектуры параллельной памяти.
Они делятся на три категории;
- Общая память:
OpenMP относится к концепции общей памяти. В этом случае разные ЦП (процессоры) будут иметь доступ к одной и той же области памяти. Поскольку все ЦП подключаются к одной и той же памяти, доступ к памяти следует обрабатывать осторожно. - Распределенная память:
Здесь каждый ЦП (процессор) будет иметь свою собственную ячейку памяти для доступа и использования. Чтобы заставить их общаться, все независимые системы будут соединены вместе с помощью сети. MPI основан на распределенной архитектуре. - Гибрид: Гибрид - это комбинация как совместно используемой, так и распределенной архитектуры. Простым сценарием, демонстрирующим мощь OpenMP, было бы сравнение времени выполнения обычной программы C / C ++ и программы OpenMP.
Шаги по установке OpenMP
- ШАГ 1. Проверьте версию компилятора GCC.
gcc --version
GCC обеспечивает поддержку OpenMP, начиная с его версии 4.2.0. Поэтому, если в системе есть компилятор GCC с версией выше, чем 4.2.0, тогда в нем должны быть настроены функции OpenMP.
Если в системе нет компилятора GCC, мы можем использовать следующую команду
sudo apt install gcc
Для более подробной поддержки по установке мы можем обратиться сюда
- ШАГ 2: Настройка OpenMP
Мы можем проверить, настроены ли функции OpenMP в нашем компиляторе или нет, используя командуэхо | cpp -fopenmp -dM | grep -i open
Если OpenMP не представлен в компиляторе, мы можем настроить его использование с помощью команды
sudo apt установить libomp-dev
- ШАГ 3: Установка количества потоков
В OpenMP перед запуском кода мы можем инициализировать количество выполняемых потоков, используя следующую команду. Здесь мы устанавливаем количество выполняемых потоков равным 8 потокам.экспорт OMP_NUM_THREADS = 8
Запуск первого кода в OpenMP
// OpenMP header #include <omp.h> #include <stdio.h> #include <stdlib.h> int main( int argc, char * argv[]) { int nthreads, tid; // Begin of parallel region #pragma omp parallel private(nthreads, tid) { // Getting thread number tid = omp_get_thread_num(); printf ( "Welcome to GFG from thread = %d
" , tid); if (tid == 0) { // Only master thread does this nthreads = omp_get_num_threads(); printf ( "Number of threads = %d
" , nthreads); } } } |
Выход:
Эта программа напечатает сообщение, которое будет выполняться различными потоками.
Скомпилировать: gcc -o gfg -fopenmp geeksforgeeks.c Выполнять: ./gfg