インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス

自動ベクトル化の概要

自動ベクトル化はインテル® コンパイラーのコンポーネントです。コンパイラーは、インテル® ストリーミング SIMD 拡張命令 (インテル® SSE、SSE2、SSE3 および SSE4)、インテル® ストリーミング SIMD 拡張命令 3 補足命令 (インテル® SSSE3)、インテル® アドバンスト・ベクトル・エクステンション (インテル® AVX、インテル® AVX2) 命令を自動的に使用します。ベクトル化機能は、並列に実行できるプログラム内の演算を検出し、並列化します。例えば、データ型によって、最大 16 までの要素を処理するシーケンシャルな SIMD 命令を 1 つの並列操作に変換します。

自動ベクトル化は、インテル® コンパイラーがループをアンロールするためにパックド SIMD 命令を生成する際に行われます。パックド命令は一度に複数のデータ要素の演算を行うため、ループをより効率良く実行できます。このプロセスは、開発者が特別な処理をすることなく、コンパイラーが適したループを自動的に識別し最適化するため、自動ベクトル化と呼ばれることがあります。場合によっては、コードに特定のキーワードやディレクティブを追加して、自動ベクトル化が行われるようにできます。

コンパイラーは、効率的なベクトル命令を生成する多様な自動ベクトル化ヒントをサポートしています。自動ベクトル化は、IA-32 アーキテクチャーとインテル® 64 アーキテクチャーでサポートされています。インテル® Parallel Studio XE の一部のエディションに含まれるインテル® Advisor XE は、コンパイラーの最適化レポートを解析して、ベクトル化を向上するためのアドバイスを生成する、Vectorization Advisor 機能を提供します。

このオプションを使用すると、インテル製マイクロプロセッサーおよび互換マイクロプロセッサーの両方で、デフォルトの最適化レベルのベクトル化が有効になります。ベクトル化により呼び出されるライブラリー・ルーチンは、互換マイクロプロセッサーよりもインテル製マイクロプロセッサーにおいてより優れたパフォーマンスが得られる可能性があります。また、ベクトル化は、/arch (Windows*)、-m (Linux* および macOS*)、[Q]x などの特定のオプションによる影響を受けます。