実行環境
Windows 10 Home 64bit
Intel Core i7-6700K
Visual Studio Community 2015 Update1
質問概要
AVX命令(_mm256_set_pd)を使用した場合、デバッガにアタッチしている状態で
ステップ実行をすると結果が異なる理由が知りたいです。
以下のようなコードがあるとします。
C++
1__m256d v; 2v = _mm256_set_pd( 4.0, 3.0, 2.0, 1.0 );
該当コードをステップ実行しない場合は以下のような期待通りの結果を得ることができます。
v.m256d_f64[0]: 1.0
v.m256d_f64[1]: 2.0
v.m256d_f64[2]: 3.0
v.m256d_f64[3]: 4.0
しかし、ブレイクポイントを張って該当コードをステップ実行で見ていくと、結果が以下のようになります。
v.m256d_f64[0]: 1.0
v.m256d_f64[1]: 2.0
v.m256d_f64[2]: 0.0
v.m256d_f64[3]: 0.0
上位128bitの値がゼロクリアされた結果が返ってくるようで、
他の命令(_mm256_load_pdなど)でも同じような挙動をします。
デバッガのウォッチの不具合かと思い値を出力したりレジスタをのぞいたりしましたが、
やはりステップ実行を行うと上位128bitはゼロクリアされていることは間違いないようでした。
コンパイル時、実行時には警告やエラーはありません。
浮動小数点モデルなどの各種コンパイルオプションもいくつか変更して動作確認をしましたが挙動似変化はありませんでした。
ステップ実行さえしなければ正しい挙動になっているようなので最終的なリリース時には問題ないのですが、
デバッグが困難ですのでできれば解決したいところです。
よろしくお願いいたします。
thom.jpさんのアンサーで解決できました。
デバッガでのブレイクポイント中断とステップ実行でも問題なく__m256d変数へのAVX命令の結果が得られました。
技術メモ&同じ問題に遭遇された方へのヒントとして、簡単にですが下記にその手段を残しておきます。
- Intel SDEの取得とインストール
ダウンロードページから以下の2つを取得し、それぞれ展開・インストールする。
・Intel SDE拡張機能
sde-msvsyyyy-x.x.x.msi
インストーラの指示に従い、Visual Studioに拡張機能をインストールする
・Intel SDE Kit
sde-external-x.xx.x-yyyy-mm-dd-win.tar.bz2
適当なディレクトリに解凍する
※展開されたファイルのうち、アンチウィルスソフトに誤検知される可能性のあるものが含まれているため
必要に応じて対応する(信頼リストへの追加など)
- Visual Studioの設定
オプション → Intel(R) SDE Debuggerの設定項目にあるSDE Kit Directoryに先ほど展開したSDE Kitを設定する。
- デバッガの切り替え
デバッガをSDE Debuggerに切り替える。
※通常のC++アプリケーションをデバッグする際はローカルWindowsデバッガーになっている。
- デバッグ開始
デバッグを開始すればSDE Debuggerがプロセスを起動してデバッグを開始する。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/01/30 18:12
2016/01/30 18:47