インテルのベクトル化ツールキット: 5. GAP のアドバイスや他の提案を実装する
この記事は、インテル® デベロッパー・ゾーンに公開されている「Intel Vectorization Toolkit: 5. Implement GAP Advice, Other Suggestions」の日本語参考訳です。
———————————————————-
ベクトル化の 6 ステップの手順へ戻る
———————————————————-
インテルのベクトル化ツールキット: ステップ 5
GAP のアドバイスや他の提案 (SIMD 対応関数や配列表記の利用) を実装します。
ループに対して GAP レポートを取得できました。可能であれば提案を実装します。
アドバイスにはコードの変更も含まれます。コードを変更する場合は、コードを変更しても「安全」であること、つまり、ループのセマンティクスや安全性に影響がないことを確認します。依存性がないことを保証する 1 つの方法は、ループを逆に実行したときに結果が変わるかどうかをチェックすることです。ランダムな順序でループを実行したときの結果を確認するのも 1 つの方法です。結果が変わればループ反復には依存性があり、ベクトル化は “安全” ではありません。依存性を排除することで、ベクトル化できる可能性があります。
ソースを変更して、適切なベクトル化が行われるように、コンパイラーに情報を知らせるか、ループを最適化します。
例 (ステップ 4 のコード)
ベクトル化されました!!
ループをベクトル化することが決まっているとしても、GAP レポートは次のいずれかの方法を推奨するかもしれません。詳しい情報は各トピックのリンク先をご覧ください。
C/C++
インテル® Cilk™ Plus
開発者が管理するベクトル化 (Pragma SIMD)
配列表記
SIMD 対応関数 (以前は要素関数と呼ばれていました)
Fortran
DO CONCURRENT
cDEC$ SIMD
——————————–
このステップでのその他の参考資料
——————————–
ウェビナー:
インテル® Cilk™ Plus の配列表記/SIMD 対応関数を使用してデータを並列に操作
(iSUS へ会員登録後、限定コンテンツの iSUS カンファレンス「並列化ゾーン」でご覧いただけます)
インテル® C++ Composer XE を使用して、最大限にコードをベクトル化してアプリケーションのパフォーマンスを改善
(iSUS オンライントレーニングのインテル® コンパイラー入門をご覧ください)
ホワイトペーパー:
インテル C++ コンパイラーによるベクトル化へのガイドの 7 章と 8 章 (GAP のアドバイスを適用) を参照
インテル® Cilk™ Plus の SIMD 対応関数を使用する
浮動小数点計算の一貫性とさまざまな最適化の影響
インテル® Xeon® プロセッサーとインテル® Xeon Phi™ コプロセッサーの浮動小数点演算の違い
コンパイラーを評価する: インテル® ソフトウェア製品の評価版を入手
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください