0

Visual Studio 2015 update 1 (Win10 を対象) で AVX2 コードのデバッグに問題があります。

デバッガーを使用して AVX2 レジスターを検査する場合、ブレークポイントを使用して _mm256_insertf128_ps-intrinsic をステップ オーバーする場合 (たとえば) は、通常のプログラムの実行と比較して内容が異なります。バグは簡単に再現できます。main 関数に次のコードを記述して、新しい Win コンソール アプリケーションを作成するだけです。

1: __m128 lo = _mm_set1_ps(2.0f);
2: __m128 hi = _mm_set1_ps(4.0f);
3: __m256 avx = _mm256_castps128_ps256(lo);
4: avx = _mm256_insertf128_ps(avx, hi, 1);
5: for (int i = 0; i < 8; i++)
6:     printf("%.2f\n", avx.m256_f32[i]);

行 4 にブレークポイントを設定し、それをステップオーバーすると、行 5 ~ 6 の印刷ループから次の出力が発生します。

2.00
2.00
2.00
2.00
0.00 <- Wrong!
0.00 <- Wrong!
0.00 <- Wrong!
0.00 <- Wrong!

プログラムを実行すると、次の出力が得られます。

2.00
2.00
2.00
2.00
4.00 <- Correct
4.00 <- Correct
4.00 <- Correct
4.00 <- Correct

MSVC と Intel コンパイラ (バージョン 16) の両方を使用してこれを試しましたが、どちらも同じ動作を示します。

他の誰かがこの問題に遭遇しましたか? これの原因が何であるか知っている人はいますか?回避策はありますか?

前もって感謝します!

4

1 に答える 1

0

「Visual Studio 2015 Update 2」をダウンロードすると、これが修正されていることがわかります。

答えはここにあります。https://stackoverflow.com/a/36801311

于 2016-04-26T04:20:41.027 に答える