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

# その他のタイプの並列処理

ベクトル化

Vector SSE 命令を使用すると、複数の同一操作を隣接するデータ値で並列に実行できます。4 つの浮動小数点演算または 2 つの倍精度演算を SSE2 をサポートするプロセッサで同時に実行できます。Maya では SSE2 のシステム サポートが必要であるため、プラグイン作成者は SSE2 が常に使用可能であると想定しても構いません。

SSE2 コードはアセンブラで直接作成するか、コンパイラの内部機能を使用して作成します。コードは C/C++ で作成でき、コンパイラはベクトル命令を生成できます。コンパイラがベクトル SSE を生成する場合、このプロセスは自動ベクトル化と呼ばれます。Intel コンパイラと gcc コンパイラは自動ベクトル化をサポートしていますが、VC++ は現在のところサポートしていません。高度なコードを作成してコンパイラでベクトル命令を生成する作業が、大幅に簡略化されています。ただし、自動ベクトル化は非常に緻密でわずかな変更でもベクトル化が消失する可能性があります。このため、自動ベクトル化を使用する C/C++ で作成されたコードは、開発者が修正して誤って自動ベクトル化を無効にしてしまわないよう細心の注意が必要です。

提供されるプラグイン sseDeformer は、Intel コンパイラで自動ベクトル化できる単純な SSE2 の例を示します。このサンプルは、大規模なポリゴン メッシュで実行すると、速度が約 3 倍に向上していることを示します。正しいフォーマットでデータを取得するときに大きなオーバーヘッドが生じる可能性があり、これによってパフォーマンス上の利点が損なわれることがあります。このコードを従来のスレッド化で使用すると、オーバーヘッドによってスレッド化によるメリットが相殺されてしまう可能性があり、有益な効果は得られません。ベクトル化はこのような場合に適した代替手段です。ベクトル化とスレッド化の両方を適用して、最大限に速度を向上できれば理想的です。

自動並列化

一部のコンパイラでは、コンパイラ自身に自動的にコードを並列化させるためのフラグが用意されています。しかしこのフラグが役に立つことは稀です。これは、コードが多大な時間を要するようになると、スレッドセーフかどうかをコンパイラが静的に分析することは非常に困難になるためです。