intel コンパイラで SIMD を有効にするには ?


みやざき  2006-05-11 23:13:46  No: 61770

Pentium M 搭載のノートパソコンで、Visual Studio .NET 2003 と 
Intel Compiler 9.0 を用いています。
---------- test.c ----------
int a[32];
int main(){

  int i;   
  for(i = 1; i < 32; i ++) a[i] = i; 

--------------------
のようなプログラムを Visual Studio で SIMD 化したいのですが
うまくいきません。

コマンドプロンプトから、
icl -QxB -Fa test.c 
を実行すると、
test.c(5) : (col. 3) remark: LOOP WAS VECTORIZED.
のようなメッセージが表示され、test.asm に
$B1$2: 
        movdqa    XMMWORD PTR _a[eax+4], xmm0                   ;5.28
        paddd     xmm0, xmm1                                    ;5.22
        add       eax, 16                                       ;5.3
        cmp       eax, 124                                      ;5.3
        jb        $B1$2         ; Prob 96%                      ;5.3
と出力されることから SIMD 化されているのが分かります。

しかし、Visual Studio 上で同様のコードを記述し、
・ Convert to use Intel C++ Project System を実行 
・ プロジェクトのプロパティから、最適化項目で /QxB、ファイル出力項目で /Fa を設定、
してビルドしても、SIMD 化されません。
LOOP WAS VECTORIZED のメッセージは出力されませんし、
test.asm の中身を見ても movdqa ... 相当の記述は見当たりません。

本人的には上記 2 つは同様のことを行っているつもりなのですが、
Visual Studio 上ではさらにプロパティの設定等が必要なのでしょうか ? 
ご教示願います。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加