SHOEISHA iD

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

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

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

インテルソフトウェア開発製品による並列化プログラミング

インテルプロセッサー向け並列化プログラミング
― 対称行列の三重対角化

インテルソフトウェア開発製品による並列化プログラミング (1)

コンパイラーによる自動並列化

 コンパイラーによる自動並列化を試します。先ほどと同じコマンドで、自動並列化のためのオプションである/Qparallelを追加してコンパイルします。

 できたプログラムの引数に2000を渡し実行してみると、実行時間は18.2秒とほとんど変化がありません。

 実行時間に変化がないのは、コンパイラーの並列化がうまく行われていないためです。というのも、デフォルトのオプションとして/Qpar-report1が指定されているので、コンパイラーが自動並列化を行うとコンパイル・メッセージとして並列化を行ったことが表示されるのですが、今回のコンパイルでは並列化のメッセージが出力されていないので並列化が行われてないことが分かります。

 ここで、/Qpar-reportオプションの引数を変更して、なぜ並列化できないのかを調べることができます。図3に/Qpar-report2を指定したときに、コンパイラーが出力する並列化レポートのメッセージを示します。並列化レポートのメッセージの意味は次のようになっています。

  • 「計算量が不足しています。」というのは、コンパイラーが並列化するのに十分な計算量がなく並列化の効果が少ないと判断したこと示しています。
  • 「並列依存関係が存在します。」というのは、並列化することによってプログラムの実行結果が正しくなくなるとコンパイラーが判断した依存関係が存在することを示します。
図3 インテルコンパイラーの並列化レポートの出力メッセージ
tridiag.cc(21): (col. 3) remark: ループは並列化されませんでした: 並列依存関係が存在しています。.
tridiag.cc(25): (col. 5) remark: ループは並列化されませんでした: 計算量が不足しています。.
tridiag.cc(39): (col. 5) remark: ループは並列化されませんでした: 計算量が不足しています。.
tridiag.cc(46): (col. 5) remark: ループは並列化されませんでした: 計算量が不足しています。.
tridiag.cc(48): (col. 7) remark: ループは並列化されませんでした: 計算量が不足しています。.
tridiag.cc(51): (col. 7) remark: ループは並列化されませんでした: 計算量が不足しています。.
tridiag.cc(59): (col. 5) remark: ループは並列化されませんでした: 計算量が不足しています。.
tridiag.cc(65): (col. 5) remark: ループは並列化されませんでした: 計算量が不足しています。.
tridiag.cc(70): (col. 5) remark: ループは並列化されませんでした: 並列依存関係が存在しています。.
tridiag.cc(71): (col. 7) remark: ループは並列化されませんでした: 並列依存関係が存在しています。.

 ここでは、/Qpar-thresholdオプションを使って並列化スレッショルド(しきい値)の変更を行います。このオプションは引数として0から100までの数字を指定するもので、デフォルトは100です。この数字が低いほどコンパイラーはより少ないループ回数で並列化の効果があると判断します。0を指定すると、コンパイラーは並列化可能なループを常に並列化します。ここでは、オプションに/Qpar-threshold0を追加してコンパイルしてみます。作成されたプログラムに引数として2000を渡すと実行時間は15.4秒となり、並列化の効果を確認できました。ただ、このオプションを指定しても「並列依存関係が存在する」と判断されたループの並列化は行うことができません。

 ここで指定したコンパイラーオプションを表2にまとめました。

表2 自動並列化に関するコンパイラーオプション
オプション 意味
/Qparallel 自動並列化を有効にする。
/Qpar-report[n] 並列化レポートの出力レベルを指定する。
/Qpar-threshold[n] 並列化レベルを指定する。

次のページ
インテル スレッディング・ビルディング・ブロックを用いた並列化

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

インテルソフトウェア開発製品による並列化プログラミング連載記事一覧

もっと読む

この記事の著者

小林 広和(コバヤシ ヒロカズ)

インテル株式会社 インテル技術本部 ソフトウェア&サービス統括部 所属。

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

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/3582 2009/03/02 00:00

イベント

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

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

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

メールバックナンバー