1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

並列プログラミング1 openMP

Last updated at Posted at 2024-11-09

はじめに

ご覧いただきありがとうございます。
このページは私が取り組んでいる研究で用いている並列処理のアウトプットとして
まとめさせていただきます。

今回はopenMPの使い方をまとめていきたいともいます。

openMP

OpenMP(Open Multi-Processing)とは共有メモリ型マシンで並列プログラミングを可能にする API
であり,Architecture Review Board(ARB)によって規定されている業界標準規格です。共有メモリ型並列計算機用のプログラムの並列化を記述するための指示文、ライブラリ関
数、環境変数などが規定されています.

openMPの特徴

並列プログラム(マルチスレッドプログラム)が簡単かつ短いコード量で記述できる。
・異なるシステム間でソースプログラムを共通化できるので移植性が高い。
・逐次プログラムから段階的に並列化していくことが可能である。
・同一のソースプログラムで並列環境と非並列環境を共存できる。
・コンパイラの自動並列化機能に比べてプログラムの高速化を達成し易い。

動作環境

M1 apple cilicon
gcc

使用言語

c言語

コンパイル方法

コンパイル時には** -fopenmp**オプションをつけてコンパイルします。
test.cをコンパイルする場合

gcc test.c -fopenmp

-oを用いる場合

gcc test.c -o test -fopenmp

実行方法

test.cをコンパイルして実行ファイルtestを作成した場合

./test

プログラム

openMP第1回目は基本的なコードを

並列化1

#include<stdio.h>
#include<omp.h>

int main(){
#pragma omp parallel
  {
    printf("Hello world\n");
  }
  return 0;
}

出力

Hello world
Hello world
Hello world
Hello world
Hello world
Hello world
Hello world
Hello world
Hello world
Hello world

解説
Hellow worldを出力する処理をコア数ぶん実行する並列化プログラム
私の使用しているPCは10コアなので10回出力されています。

macbookでは以下のコマンドで物理コア数を確認できます。

#ターミナルでCPU 物理コア数を確認するコマンド
sysctl -n hw.physicalcpu_max

#出力
10

並列化2

for文の並列化
繰り返しの処理を並列化させます。

#include<stdio.h>
#include<omp.h>

int main(){
  int n=100,sum;
  #pragma omp prallel for
  {
    for(int i=0; i<=n;i++){
      sum+=i;
    }
    printf("結果 %d\n",sum);

     }
   return 0;
}


出力

結果 1497928635

解説
このプログラムは1から100までの和を計算するプログラムです。
1から100までの和は5050ですが出力は1497928635

答えが異なる理由
ランダムにsumに書き込んでしまっているため答えが誤っています。

private節

コアごとの初期化を防ぐ

reduction節

たし込み操作、集約の時に使う。

正しいプログラム

#include <stdio.h>
#include <omp.h>

int main() {
    int sum = 0;
    int i;

    #pragma omp parallel for private(i) reduction(+:sum)
    for (i = 0; i <= 100; i++) {
        sum += i;
    }

    printf("結果: %d\n", sum);

    return 0;
}

出力

結果: 5050

最後に

今回はopenMPの簡単な使い方を大雑把に解説しました。
次回はredction節とprivate句の詳しい使い方についてまとめて行きます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?