以前のMPP版ベンチマークでは、殆ど単精度版を使用していた。
これは、テストデータ配信元のTopcrunch への投稿結果が単精度版での
ベンチマーク結果が多かったためである。
今回、倍精度版でのベンチマークを行う必要があり、いつも通りNeonモデル
を実行したところ、Linux倍精度版は問題なく動いたのだが、Windows64bit版
はスタックオーバーフローのエラーでコケテしまう。
落ち方はこうだ。
バグではないかと思い、開発元へ問い合わせたら、担当者から以下の回答。
「デフォルトのスタックサイズに対して、モデルが大きすぎる。
これはユーザ自身でMSVS環境で修復可能である。例えばスタックサイズを
/STACK:160000000. まで増やすことを推奨する。コマンドは、
editbin /stack:160000000 mppdyna.exe.
もし、MSVS環境を持っていなかったら、修正モジュールをサイトにアップしておく」
あくまで、自分に非はなく、MSVSげ原因であるという見解だ。
幸いに自分はMSVS環境を持っているので、スタックサイズの拡大を自分でやってみた。
1. Visual STudio コマンドプロンプト起動
スタートメニュー - MicroSoft Visual Stuidio – Visual STudio Tools
– Visual Studio X64 Win64 コマンドプロンプト
2.スタックサイズの修正
> cd 実行モジュールのパスへ移動
> dumpbin /HEADERS mpp700d.exe – 現在のスタックサイズを確認
Dump of file mpp700d.exe
PE signature found
File Type: EXECUTABLE IMAGE
FILE HEADER VALUES
8664 machine (x64)
……… (略) ………….
100000 size of stack reserve
1000 size of stack commit
……… (略) ………….
> editbin /stack:160000000 mpp700d.exe
少し時間がかかって終了。
再度スタックサイズの確認すると、
9896800 size of stack reserve
1000 size of stack commit
> exit – 終了
このモジュールでneonデータを実行したら、問題なく動いた。
念のため、単精度版を調べてみたら、
989680 size of stack reserve
1000 size of stack commit
倍精度版より大きな値になっていたので、問題なく動いていたのだ。
MPP版を使うということは、これ位の知識がないと使う権利がないということか?
というか、一般のユーザにとっては、
こんな面倒なことは絶対にできない!
冥王星で知的生物を探すよりも困難だ!
と思われるので、スタックサイズを大きく(/stack:160000000) した倍精度
&単精度のモジュールをサイトにアップしておきます。
R7.0.0/
mpp700d_winx64_pmpi.zip & mpp700s_winx64_pmpi.zip