LoginSignup
0
0

More than 5 years have passed since last update.

VBAHaskellの紹介 その10 (ループの性能が上がらない)

Last updated at Posted at 2015-04-30

(この記事ははてなブログ http://mmyymmdd.hatenablog.com/ の再掲です)
2015-04-26

前回書いたループ性能を改善するためにAPIにそのための関数を追加し、ついでにリファクタリングしてみた。

終了判定されるまで変換関数を繰り返し適用する次のような関数をAPIに追加して、250msかかったものが140msになったが、10倍以上のスピードアップを期待していたので満足できない結果となった。

// 単純なループ(終了判定されるまで変換関数を適用)
VARIANT __stdcall  repeat_imple( VARIANT*  init           ,  //初期値
                                 VARIANT*  pred           ,  //終了判定関数
                                 VARIANT*  trans          ,  //変換関数
                                 __int32   maxN           ,  //回数上限
                                 __int32   scan           ,  //履歴 or 結果
                                 __int32   stopCondition);   //終了条件

API側に個別目的の関数を追加するのは抵抗があったので他の方法を検討していたが、いい方法が思いつかなかったのでこうした。少し残念である。

C++側でループすることでファンクタの生成コストはほとんどなくなったはずなのに性能が伸びないのは、合成した関数の呼び出し方法そのものが悪いのだろうか。

VBAHaskellの紹介 その9 (明示的なループの性能がいまいち)
VBAHaskellの紹介 その1 (最初はmapF)

ソースコード:
https://github.com/mYmd/VBA
dllバイナリ:
https://github.com/mYmd/VBA/blob/master/bin/mapM (32bit-Office用)
https://github.com/mYmd/VBA/blob/master/bin/mapM64 (64bit-Officey用)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0