MPPDYNA 倍精度版 スタックサイズの変更 « ACS NEWS

MPPDYNA 倍精度版 スタックサイズの変更

2013 年 11 月 13 日 by yo yamgatta

以前のMPP版ベンチマークでは、殆ど単精度版を使用していた。
これは、テストデータ配信元のTopcrunch への投稿結果が単精度版での
ベンチマーク結果が多かったためである。
今回、倍精度版でのベンチマークを行う必要があり、いつも通りNeonモデル
を実行したところ、Linux倍精度版は問題なく動いたのだが、Windows64bit版
はスタックオーバーフローのエラーでコケテしまう。


落ち方はこうだ。

stack_overflow

バグではないかと思い、開発元へ問い合わせたら、担当者から以下の回答。

「デフォルトのスタックサイズに対して、モデルが大きすぎる。
これはユーザ自身でMSVS環境で修復可能である。例えばスタックサイズを
/STACK:160000000. まで増やすことを推奨する。コマンドは、
editbin /stack:160000000 mppdyna.exe. 
もし、MSVS環境を持っていなかったら、修正モジュールをサイトにアップしておく」

あくまで、自分に非はなく、MSVSげ原因であるという見解だ。
幸いに自分はMSVS環境を持っているので、スタックサイズの拡大を自分でやってみた。

1. Visual STudio コマンドプロンプト起動
スタートメニュー - MicroSoft Visual Stuidio – Visual STudio Tools
      – Visual Studio X64 Win64 コマンドプロンプト

visual-studio-command

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

 

コメントをどうぞ

*