天天看點

OpenMP自學筆記(一) HelloWorld程式OpenMP編譯環境

OpenMP自學筆記(一) HelloWorld程式

并行計算已經成為計算科學研究和應用中的熱點,MPI、CUDA等有着廣泛的前景和應用。OpenMP較為簡單,作為并行計算的入門,了解相關概念和程式設計标準,是非常合适的。本人最近在學習并行計算/OpenMP的相關内容,整理出筆記供自己複習,也供大家的參考。

OpenMP編譯環境

OpenMP相對于MPI來講,要友好很多。

Windows環境下,不需要太多的配置,隻要安裝Visual Studio 2008以上,并在項目選項中開啟OpenMP的支援,就可以輕松使用。( 當然,MinGW也是支援的 )

Linux環境中,有GCC/G++即可使用OpenMP

在terminal中輸入:

g++ -fopenmp hello.o hello.cpp

./hello.o

注:GNU系列支援的OpenMP标準比VS更新。

(筆者用的系統是:Ubuntu 18.04)

Hello World程式

#include<iostream>
#include<omp.h>
using namespace std;

int main()
{
	int tid;	//代表線程号
	omp_set_num_threads(4);		//設定4個線程
	
	/*并行區域開始*/
 	#pragma omp parallel private(tid)
	{
		tid=omp_get_thread_num();
		cout<<"這是線程"<<tid<<endl;
    	cout<<"Hello World!"<<endl;
	}

    return 0;
}
           

第一個Hello World程式就完成了。并行區域由pragma編譯指導語句開始,private語句是該語句的子句。

但需要注意的是#pargma行不能有注釋,否則可能會報錯。

omp_get_thread_num() 來擷取程序号

列印程序号

列印Hello Wrold!

理想狀态下的輸出:

這是線程0

Hello World!

共輸出4個線程版本的Hello World。

實際情況,Hello World可能是亂序輸出的,因為程式并非按照0-1-2-3的順序串行,而是多線程同時執行相同的語句,輸出情況應該是随機的,或難以預測的,要想設計出完美的程式,就需要了解後續”資料環境“鎖”"格栅"等相關并行程式設計的概念。

繼續閱讀