// C++#include<iostream>#include<mpi.h>#include<omp.h>usingnamespacestd;intmain(intargc,char*argv[]){// Serial Region (master thread of an MPI rank) // MPI Parametersintrank,size,len;charname[MPI_MAX_PROCESSOR_NAME];// OpenMP Parametersintid,nthreads;// All ranks initiate the message-passing environment.// Each rank obtains information about itself and its environment.MPI_Init(&argc,&argv);// start MPIMPI_Comm_size(MPI_COMM_WORLD,&size);// get number of ranksMPI_Comm_rank(MPI_COMM_WORLD,&rank);// get rankMPI_Get_processor_name(name,&len);// get run-host name// Master thread obtains information about itself and its environment.nthreads=omp_get_num_threads();// get number of threadsid=omp_get_thread_num();// get threadcout<<"SERIAL REGION: Runhost:"<<name<<" Rank:"<<rank<<" of "<<size<<" ranks, Thread:"<<id<<" of "<<nthreads<<" threads hello, world"<<endl;// Open parallel region.// Each thread obtains information about itself and its environment.#pragma omp parallel private(name,id,nthreads){MPI_Comm_size(MPI_COMM_WORLD,&size);// get number of ranksMPI_Comm_rank(MPI_COMM_WORLD,&rank);// get rankMPI_Get_processor_name(name,&len);// get run-host namenthreads=omp_get_num_threads();// get number of threadsid=omp_get_thread_num();// get thread #pragma omp critical{cout<<"PARALLEL REGION: Runhost:"<<name<<" Rank:"<<rank<<" of "<<size<<" ranks, Thread:"<<id<<" of "<<nthreads<<" threads hello, world"<<endl;}}// Close parallel region.// Serial Region (master thread)cout<<"SERIAL REGION: Runhost:"<<name<<" Rank:"<<rank<<" of "<<size<<" ranks, Thread:"<<id<<" of "<<nthreads<<" threads hello, world"<<endl;// Exit master thread. MPI_Finalize();// terminate MPIreturn0;}