📜  OpenMP |你好世界计划

📅  最后修改于: 2021-05-30 10:20:00             🧑  作者: Mango

前提条件: OpenMP |安装指南简介

在C / C++ / Fortran中,可以使用OpenMP实现并行编程。在本文中,我们将学习如何使用OpenMP创建并行的Hello World程序。

创建并行程序的步骤

  1. 包括头文件:我们必须包括我们程序的OpenMP头文件以及标准头文件。
    //OpenMP header
    #include 
    
  2. 指定并行区域:在OpenMP中,我们需要使用关键字pragma omp parallel将其设置为并行区域。 pragma omp并行用于派生其他线程以执行并行中包含的工作。原始线程将被标记为线程ID为0的主线程。用于创建并行区域的代码为,
    #pragma omp parallel
    {
      //Parallel region code 
    } 
    

    所以,这里我们包括

    #pragma omp parallel                   
    {
        printf("Hello World... from thread = %d\n", 
               omp_get_thread_num());
    }  
    
  3. 设置线程数
    我们可以使用外部变量设置执行程序的线程数。
    export OMP_NUM_THREADS=5
    

    平行区域图
    5个线程的并行区域

    如上图所示,一旦编译器遇到并行区域代码,则主线程(线程ID为0的线程)将派生到指定数量的线程中。在这里,它将分成5个线程,因为我们将使用export OMP_NUM_THREADS=5命令将要执行的线程数初始化为5。并行区域内的整个代码将由所有线程同时执行。一旦并行区域结束,所有线程将合并到主线程中。

  4. 编译并运行
    编译:
    gcc -o hello -fopenmp hello.c

    执行:

    ./hello

以下是带有上述方法输出的完整程序:

程序:由于我们将要执行的线程数指定为5,因此5个线程将在同一时间执行相同的print语句。在这里,我们不能保证线程的执行顺序,即并行区域中的语句执行顺序对于所有执行而言都不相同。在下图中,在第一次执行程序时,线程1首先完成,而在第二次运行中,线程0首先完成。 omp_get_thread_num()将返回与该线程关联的线程号。

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


输出:

  • 第一次运行时:
  • 多次运行时:线程的执行顺序每次都会更改。
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”