OpenMP | Введение в руководство по установке

Опубликовано: 4 Декабря, 2021

После долгой жажды распараллеливания регулярных циклов в матрично-ориентированном численном программировании 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
Хотите узнать о лучших видео и практических задачах, ознакомьтесь с базовым курсом C ++ для базового и продвинутого уровня C ++ и курсом C ++ STL для базового уровня плюс STL. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .
C++ C