OpenMP | Программа Hello World

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

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

В C / C ++ / Fortran параллельное программирование может быть достигнуто с помощью OpenMP. В этой статье мы узнаем, как создать параллельную программу Hello World с помощью OpenMP.

ШАГИ ДЛЯ СОЗДАНИЯ ПАРАЛЛЕЛЬНОЙ ПРОГРАММЫ

  1. Включите файл заголовка : мы должны включить заголовок OpenMP для нашей программы вместе со стандартными файлами заголовков.
    // Заголовок OpenMP
    #include <omp.h>
    
  2. Укажите параллельную область : в OpenMP нам нужно указать область, которую мы собираемся сделать параллельной, используя ключевое слово pragma omp parallel . Прагма omp parallel используется для разветвления дополнительных потоков для выполнения работы, заключенной в параллельном режиме. Исходный поток будет обозначен как главный поток с идентификатором 0. Код для создания параллельной области будет следующим:
    #pragma omp parallel
    {
      // Код параллельного региона 
    } 
    

    Итак, здесь мы включаем

    #pragma omp parallel                   
    {
        printf ("Привет, мир ... из потока =% d  n", 
               omp_get_thread_num ());
    }  
    
  3. Установите количество потоков :
    мы можем установить количество потоков для выполнения программы, используя внешнюю переменную.

    экспорт OMP_NUM_THREADS = 5
    

    Схема параллельной области

    Согласно приведенному выше рисунку, как только компилятор обнаруживает код параллельных областей, главный поток ( поток с идентификатором потока 0 ) разветвляется на указанное количество потоков. Здесь он будет разделен на 5 потоков, потому что мы инициализируем количество выполняемых потоков равным 5, используя команду export OMP_NUM_THREADS=5 . Весь код в параллельной области будет выполняться всеми потоками одновременно. Как только параллельная область закончится, все потоки будут объединены в главный поток.

  4. Скомпилировать и запустить :
    Скомпилировать:
     gcc -o привет -fopenmp hello.c

    Выполнять:

     ./Привет

Ниже приведена полная программа с результатами описанного выше подхода:

Программа: Поскольку мы указали количество выполняемых потоков равным 5, 5 потоков будут выполнять один и тот же оператор печати в один и тот же момент времени. Здесь мы не можем гарантировать порядок выполнения потоков, т.е. порядок выполнения операторов в параллельной области не будет одинаковым для всех исполнений . На рисунке ниже, при выполнении программы для первого потока 1 завершается первым, тогда как во втором запуске поток 0 завершается первым. omp_get_thread_num() вернет номер потока, связанный с потоком.

Программа OpenMP Hello World

// OpenMP program to print Hello World
// using C language
// OpenMP header
#include <omp.h>
#include <stdio.h>
#include <stdlib.h>
int main( int argc, char * argv[])
{
// Beginning of parallel region
#pragma omp parallel
{
printf ( "Hello World... from thread = %d " ,
omp_get_thread_num());
}
// Ending of parallel region
}

Выход:

  • При первом запуске:
  • При многократном запуске: порядок выполнения потоков меняется каждый раз.
Хотите узнать больше о лучших видео и практических задачах, ознакомьтесь с базовым курсом C ++ для базового и продвинутого уровней C ++ и курсом C ++ STL для базового уровня плюс STL. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .