SHOEISHA iD

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

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

基礎から学ぶOpenMP

OpenMPのメモリモデルとfork-joinモデル

基礎から学ぶOpenMP 第3回

  • X ポスト
  • このエントリーをはてなブックマークに追加

パフォーマンス測定法

 並列処理プログラミングでは、パフォーマンスを測定するのが大変困難です。ですから、並列処理対応のパフォーマンス測定ツールを使用することをお勧めします。しかし、ちょっとしたプログラムのパフォーマンスを自分で測定したい時があるかと思います。その時の注意点を述べます。

 OpenMPでの鉄則は、omp_get_wtime関数を使用することです。その理由は、既存の関数はマルチスレッドに対応していないからです。例えば、逐次プログラミングではGetTickCount64関数を使用することが多いでしょう。しかしこの関数は、他のスレッドから割り込みされた場合に正しい時間を計測することができません。その他に考えられる関数はGetThreadTimes関数です。しかしこの関数は1つのスレッドの処理時間しか計測できません。OpenMPは抽象化されており、いくつのスレッドが生成されるのか分かりません。これらのことを考慮すると、OpenMPを使用した並列プログラムで処理時間を計測する際には、OpenMPに用意されたomp_get_wtime関数を使うことになります。

 今後便利で高精度なAPIが登場するかもしれませんが、その時までomp_get_wtimeを使用することをお勧めします。

まとめ

 今回はOpenMPを正しく使用するために、メモリモデルと採用されている並列処理を紹介しました。また、OpenMPでのパフォーマンス測定法について書きました。OpenMPを従来のマルチスレッドプログラミングと比べると、使いやすく便利なのは確かです。しかし、どのような道具も正しい知識を持たねば、使いこなすことはできません。この記事をもとに思考錯誤を繰り返し、OpenMPの正しい使い方をマスターすることをお勧めします。

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

参考資料

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
基礎から学ぶOpenMP連載記事一覧

もっと読む

この記事の著者

インドリ(インドリ)

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

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5214 2010/06/14 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング