API ガイド > マルチスレッド化プラグイン >

# ベンダ固有の OpenMP の課題

- 既定では、Intel OpenMP スレッドはアクティブのままで、タスクの完了後 200 ミリ秒間スピンします。このスピンによりスレッドはすばやく再始動しますが、CPU サイクルを消費します。5 fps 以上で再生するアニメーションの一部として評価された単一の OpenMP ループは、常にすべての CPU の頻繁なスピンを維持できるため、200 ミリ秒は Maya のようなアプリケーションのスピンとしては非常に長い時間です。このようなスピンは、アプリケーションの他のスレッドやシステムの他のアプリケーションにまで影響を与えます。このため、Maya ではスピンウェイト時間は明示的にゼロに設定されています。スピンによる大幅なパフォーマンスの向上が見込まれる処理が集中したループの場合にのみ一時的にゼロ以外の値を使用し、処理後は必ずゼロにリセットします。

  プラグインで Intel OpenMP を使用してゼロ以外のスピンウェイト値を設定する場合、Intel コンパイラ バージョンのヘッダ ファイル omp.h を組み込んでから kmp_set_blocktime() 関数を使用します。ただし、スピンウェイト時間をゼロに戻してからプラグインを終了し、制御を Maya に返してください: kmp_set_blocktime(0) ;

- Microsoft OpenMP スレッドはスピンウェイトを行わないため、上記の説明は当てはまりません。ただし、複数のスレッド化領域が連続して実行されると、スレッド プールを毎回有効にする必要があるため、パフォーマンスの低下を招く可能性があります。
- Visual Studio 2005 の OpenMP 実装 では、ガイド付きスケジュール設定の信頼性が低く、不正な結果が生じることがあります。これは Visual Studio 2008 では修正されていますが、Maya のプラグインでは Visual Studio 2005 が必要であるため、テスト結果は慎重に確認してください。または、このバージョンのコンパイラでは、このスケジュール設定モデルの使用は避けてください。