SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

基礎から学ぶOpenMP

OpenMPにおける変数の扱いと並列リダクション

基礎から学ぶOpenMP 第4回


ダウンロード サンプルコード (13.3 KB)

並列リダクション

 全体に渡って、総和・最大値・最小値・論理積などを求めることをリダクションと呼びます。並列的なリダクション処理を実装するのは少々難しいですが、幸いOpenMPには簡単に並列リダクションを実装するためにreduction指示句が用意されています。

 サンプルプロジェクトReductionSampleのコードを掲載しますので、先ずはこのコードを見てください。

reduction指示句の使い方を示すサンプル
#include <stdio.h>
#include <omp.h>

int main()
{
    int i, count, sum;
    count = 0;
    sum = 0;
    #pragma omp parallel num_threads( 10 ) reduction( +: count, sum )
    {
        for ( i = 0; i < 10; i++ )
        {
            count++;
            sum += i;
        }
        printf( "スレッド:%d\t実行回数%d回 合計値%d\n", omp_get_thread_num(), count, sum );
    }

    /* 最終値を表示 */
    printf( "【最終値】\t実行回数%d回 合計値%d\n\n", count, sum );
    return 0;
}

 このサンプルを実行すると、総合計を並列的に算出します。前回掲載した総合計を求めるfork-joinモデルのサンプルと見比べてください。OpenMPを使用すると、並列リダクション処理を、簡単に実装できることが分かります。

 OpenMPを用いて並列リダクション処理を行いたい場合、reduction指示句を指定するだけです。reduction指示句は、括弧内に「オペレーション(+、*などの符号):使用する変数(複数指定可能)」を記述するだけです。もし、複数の演算を行いたい場合は、reduction指示句を演算の数だけ指定します。

まとめ

 今回はOpenMPの変数に関する指示句を紹介しました。前回の記事と併せて読むと、並列処理での変数の扱い方について多くのことが分かったと思います。並列処理において、変数の扱い方は非常に重要です。変数の使い方を理解しないと、正しく並列プログラミングをすることはできず、バグに悩まされる羽目になります。

 変数の扱い方をマスターすれば、並列処理特有のバグを大幅に減らすことができます。本記事が、並列処理特有のバグを減らす一助になれば幸いです。

 次回は、より高度なOpenMPの概念を解説します。お楽しみに。

参考資料

修正履歴

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
基礎から学ぶOpenMP連載記事一覧

もっと読む

この記事の著者

インドリ(インドリ)

分析・設計・実装なんでもありのフリーエンジニア。ブログ「無差別に技術をついばむ鳥(http://indori.blog32.fc2.com/)」の作者です。アドバイザーをしたり、システム開発したり、情報処理技術を研究したりと色々しています。座右の銘は温故知新で、新旧関係なく必要だと考えたものは全て学...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/5290 2010/08/04 07:42

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー