OpenMP*、インテル® TBB、インテル® Cilk™ Plus におけるマスタースレッドとワーカースレッドの浮動小数点設定の違い

同カテゴリーの次の記事

インテル® VTune™ Amplifier XE Linux* 版を使用するためのコンパイラー・オプション

この記事は、インテル® ソフトウェア・ネットワークに掲載されている「Floating-point Settings in Worker Threads May Differ from Master Thread for OpenMP, TBB and Intel Cilk Plus」の日本語参考訳です。


リファレンス番号: dpd20087206、bz-1755、dpd20088154 

バージョン: 2011 (コンパイラー 12.0)

製品: インテル® Parallel Composer およびインテル® Composer XE

オペレーティング・システム: Windows、Linux、Mac OS X

問題:

ほとんどのオペレーティング・システムでは、スレッド生成ルーチンはマスタースレッドからワーカースレッドに浮動小数点設定を引き継ぎません。このため、丸めモードや突発アンダーフローのような (Flush-to-Zero としても知られる) 設定は、ワーカースレッドで異なることがあります。つまり、ワーカースレッドで実行された計算と、マスタースレッドで実行された同様の計算で同一の結果が得られない可能性があります。

この問題は、インテル® コンパイラー 12 で OpenMP* またはインテル® Cilk™ Plus のいずれかを使用してビルドしたアプリケーション、およびインテル® コンパイラーまたは他のコンパイラー (gcc* など) でインテル® スレッディング・ビルディング・ブロック (インテル® TBB) を使用してビルドしたアプリケーションで発生することがあります。

例えば、Windows* で /O2 /Qopenmp を使用してアプリケーションをコンパイルした場合、突発アンダーフローはマスタースレッドで有効になりますが、ワーカースレッドでは有効になりません。ワーカースレッドで正規化されていない浮動小数点値は、マスタースレッドでは結果が 0 になります。浮動小数点例外をマスク解除するため、/Qopenmp /fpe:0 を使用して Fortran アプリケーションをコンパイルした場合、または /Qopenmp /Qfp-trap:common を使用して C アプリケーションをコンパイルした場合、マスタースレッドでゼロ除算が行われると例外が発生しますが、ワーカースレッドでゼロ除算が行われても例外は発生しません。浮動小数点コントロール・ワードを変更するほかのスイッチについては、『インテル® コンパイラー・ユーザー・リファレンス・ガイド』を参照してください。

解決方法:

OpenMP* では、環境変数 KMP_INHERIT_FP_CONTROL=1 を設定してください。この設定を行うことで、ワーカースレッドはスレッド作成時にマスタースレッドの浮動小数点設定を継承するようになります。この設定は、インテル® Composer XE 2011 に含まれるインテル® コンパイラー 12.0 Update 2 でデフォルトになりました。

インテル® Cilk™ Plus では、各スレッドで浮動小数点の状態を明示的に設定することができます。この問題は、コンパイラーの将来のリリースで対応される予定です。 インテル® TBB については、この問題はインテル® TBB 3.0 Update 5 およびインテル® C++ Composer XE 2011 Update 2 で修正済みです。

[DISCLAIMER: The information on this web site is intended for hardware system manufacturers and software developers.Intel does not warrant the accuracy, completeness or utility of any information on this site.Intel may make changes to the information or the site at any time without notice.Intel makes no commitment to update the information at this site.ALL INFORMATION PROVIDED ON THIS WEBSITE IS PROVIDED “as is” without any express, implied, or statutory warranty of any kind including but not limited to warranties of merchantability, non-infringement of intellectual property, or fitness for any particular purpose.Independent companies manufacture the third-party products that are mentioned on this site.Intel is not responsible for the quality or performance of third-party products and makes no representation or warranty regarding such products.The third-party supplier remains solely responsible for the design, manufacture, sale and functionality of its products.Intel and the Intel logo are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries.*Other names and brands may be claimed as the property of others.]

インテル® ソフトウェア製品のパフォーマンス/最適化に関する詳細は、最適化に関する注意事項 (英語) を参照してください。

関連記事

  • データとコードの並べ替え: 最適化とメモリー – パート 2データとコードの並べ替え: 最適化とメモリー – パート 2 この記事は、インテル® デベロッパー・ゾーンに公開されている「Putting Your Data and Code in Order: Data and layout - Part 2」の日本語参考訳です。 この記事の PDF 版はこちらからご利用になれます。 パフォーマンスとメモリーに関するこのシリーズ (全 2 […]
  • Parallel Universe マガジンParallel Universe マガジン Parallel Universe へようこそ。 米国インテル社が四半期に一度オンラインで公開しているオンラインマガジンです。インテルの技術者によるテクノロジーの解説や、最新ツールの紹介など、並列化に関する記事を毎号掲載しています。第1号からのバックナンバーを PDF 形式で用意しました、ぜひご覧ください。 12 […]
  • マルチスレッド開発ガイド: 4.6 インテル® Parallel Composer を利用して並列コードを開発するマルチスレッド開発ガイド: 4.6 インテル® Parallel Composer を利用して並列コードを開発する コードの並列化にはさまざまな手法があります。この記事では、インテル® Parallel Composer で利用可能な手法の概要を説明し、各手法の主な長所を比較します。インテル® Parallel Composer は Windows* 上の C/C++ を使用した開発のみを対象としていますが、これらの手法の多くは Fortran や […]
  • インテル® IPP における OpenMP* サポートの変更インテル® IPP における OpenMP* サポートの変更 この記事は、インテル® ソフトウェア・ネットワークに掲載されている「OpenMP support changes in Intel Performance libraries […]
  • Sparse Ruler の並列計算Sparse Ruler の並列計算 この記事は、インテル® デベロッパー・ゾーンに掲載されている「Parallel Computation of Sparse Rulers」の日本語参考訳です。 この記事では、Sparse Ruler (まばらな定規) 問題の概要、この問題を計算する 2 […]