Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxについて >> Linuxシステムでマルチスレッドプログラミングをopenmpする方法

Linuxシステムでマルチスレッドプログラミングをopenmpする方法

  

OpenMPは、Linuxシステムを含む複数のプラットフォームをサポートすることができるマルチプロセッサマルチスレッドプログラミング言語です。それを知りましょう。
ログイン

キー構文:

のコードは次の通りである:

#inlcude "omp.h"

の#pragma OMP平行> #pragma omp reduction(+:変数)

#pragma omp critical //lock

{

}

#pragma omp private for parallel (x、y)//各スレッドはx、y変数を独立してコピーします。デフォルトに設定されていない場合はお互いに干渉しません。

#pragma omp parallel forスケジュール//ワークロード全体をn /kブロックに分割してからマルチスレッドスケジューリング

{

#pragma omp section //セクション

の下では、関数間に変数の依存関係はありません。 。 。 。 。 。 。 。 。

#pragma omp section

。 。 。 。 。 。 。 。 。

}

#pragma omp parallel

{

。 。 。 。 。 。 。 ();

#pragma omp master /single //メインスレッドのみが以下の関数にアクセスできることを確認します。違いは、マスターにバリアバリアがなく、最初に完了したシングルスレッドが完了を待つことです。スレッド

{

}

。 。 。 。 。 。 。

} "/p" "p" #pragma omp barrier /nowait //バリアを強制的に設定します/後続の関数が前のマルチスレッドに依存していない場合は待つ必要はありません、nowaitを使用できます

#pragma omp parallel firstprivate(variable)/lastprivate(variable)//各マルチスレッド初期値に対して/割り当てがメインスレッドを使用するメインスレッドに割り当てられている場合はメインスレッドに戻る

OpenMPがあるAPI:

コードは次のとおりです。

int omp_get_num_threads(); //現在使用中のスレッド数を取得します

int omp_get_num_threads(2/3 /...)//使用するスレッド数を設定します。

nt omp_get_thread_num(void); //現在のスレッド番号を返します。

int omp_get_num_procs(void); //使用可能な処理コアの数を返します。 p> ubuntuでは、 "omp.h"ヘッダファイルを追加する必要はありません。コンパイル時に-fopenmpを追加するだけです。

例えば、emacs操作コマンドは次のとおりです。

コードは次のとおりです。

emacs omp.c "/p" "p" #include "stdio.h"

int main()

{
intランク、サイズ;

#pragma omp parallel num_thread(3)private(rank)//num_threadsは、スレッド数を制御するために使用されます。 Br>

//またはomp_set_num_threads(3); "/p" "p" {

rank = omp_get_thread_num();

size = omp_get_num_threads();

printf(現在、%dの%dを使用しています。\\ n'、ランク、サイズ);

}

return 0;

} /p "p" Ctrl + xs

alt + xコンパイル

gcc -fopenmp -o omp omp.c

alt + shift + 1。 /omp

上記はLinuxでのOpenMPマルチスレッドプログラミングの紹介ですこの記事では、主にOpenMPマルチスレッドプログラミングの例を紹介していますが、もっと詳しく知りたい場合はもっと注意を払ってください。それを我慢しなさい。

Copyright © Windowsの知識 All Rights Reserved