Previous Page | Next Page

[ADP開発日誌]Ver 0.57 アルファ版リリース(性能強化)

キャッシュ機能の用例を書こうかと思っていましたが、前回のリリースからバグやらその他修正したい点がありましたので、修正版をアップしました。
バグフィックスの他に、以下の2点の強化を行っています。
 
■メモリ使用効率の改善(メモリマネージャの追加)
バックトラック時に不要なオブジェクトを解放していますが、多くの場合すぐに同じオブジェクトを使用することになります。このために不要なオブジェクトを直ぐに解放せずにリサイクルするようなメモリマネージャを追加しました。
将来的にはメモリマネージャとキャッシュ機能を連動させ、メモリ不足状態の時はキャッシュで使用しているメモリを解放するという使い方も想定しています。
(現在のバージョンではキャッシュしたメモリはプログラムの終了時まで解放されません)。
 
■パフォーマンスの改善
前回、0.56のリリースで、フィボナッチ数列の値を求めるサンプルを示しましたが、JavaScriptのコードを見つけ、IE8で実行させるとそこそこのスピードで動作しました。キャッシュ機能を使わない生のADPの数値演算の性能がJavaScriptの数値演算の性能に負けているということですが、こりゃいかんということで若干ですがパフォーマンスを改善しています。それでもまだJavaScriptの方が速いのですが、今後もぼちぼち改善していきます。
2010-11-25 | コメント:0件

[ADP開発日誌]Ver 0.56 アルファ版リリース

 前回のリリース告知からはや2ヵ月半が過ぎやっと述語キャッシュ機能を付けました。
キャッシュ機能ですが、同一の関数(述語)の呼び出し(評価)を行う場合に、1回目の呼び出しの結果を保存しておき、2回目の呼び出しでは1回目の呼び出し結果を使います。同一の判定ですが、述語名と引数の値が同じならキャッシュします。変数に関しては、値があればその値が同じか比較し、値がなければ同一とみなします(変数名が違っていてもキャッシュが有効になります)。
なので、printn関数のように副作用がある場合やrand関数のように毎回異なる値になることを期待する述語の場合はキャッシュ機能を使うとバグリます。つまりprintnの場合は2回目の画面出力が行われなくなり、rand関数の場合は同じ値を返して乱数でなくなります。
 
以下、フィボナッチ数例の値を求めるサンプルを例に、使い方を示します。
 
まずはキャッシュなし版のコード(fib1.p)で、
+fib(0,0);
+fib(1,1);
+fib($x,$y),fib($x - 1, $f1),fib($x - 2, $f2), $y == $f 1+ $f2;
,fib(25).printn;
以下、私のマシン(Core i7-920)での実行結果です。
D:>adp -t fib1.p
75025
time is  1538ms.
 
以下、キャッシュあり版のコード(fib2.p)で、
+fib(0,0);
+fib(1,1);
+fib($x,$y),fib$($x - 1, $f1),fib$($x - 2, $f2), $y == $f 1+ $f2;
,fib(25).printn;
以下、私のマシン(Core i7-920)での実行結果です。
D:>adp -t fib2.p
75025
time is     3ms.
 
キャッシュあり版のコードですがぱっとみた感じ違いが解らないかもしれませんが、fib述語を呼び出している部分『fib$($x - 1, $f1)』で、fib$ と述語名の終わりに $ が付いています。つまり、
 述語名の後に $ をつけるとキャッシュ機能が有効になります。 キャッシュあり版となし版で、速度を比較しますとあり版が激速になっていることが分かるかと思います。
fib1.pフィボナッチ数例のコードですが、良く見るコードだと思いますが、このサンプルは実行速度の面で問題があります。2回再帰関数を呼び出しているので実行時間は、入力する値が大きくなると指数関数的に増えて行きます。
fib2.pの例で、キャッシュ機能を使いますと、再帰呼び出しが事実上1回になりますので、入力値が大きくなっても実行時間が指数関数的には増えなくなります。
キャッシュは万能でないので、fib2.pの例では、再帰関数を使う別の問題(大きな数を計算させるとスタックがあふれる)は解決できませんが、ADPのキャッシュ機能を使えば、コードを若干修正するだけでそこそこの性能が得られるので適用対象によっては有効な武器となるでしょう。
(ちなみにですが、フィボナッチ数例を求める実用的なコードではもっと別の実装を選択します。)
 
通常プログラムを高速化したいときですが、プログラマは追い込まれており、出来るだけお手軽にキャッシュ機能をつけたいと思います。また、不具合が出たときに取り外すのも手軽にやりたいと思います。このようなコンセプトの元、
 ADPでは、関数(述語)の呼び出しそのものをキャッシュする機能 としてキャッシュ機能を実装しています。これは、なかなか便利だと思います。

次回は、別の例でキャッシュ機能を紹介します。
2010-11-16 | コメント:0件

[ADP開発日誌]次回リリース予定の機能

前回のアルファ版リリースから早くも一カ月が過ぎ去ろうとしていますが、ドキュメントやテストプログラムをちまちま書こうかと思っていたのですが、どうしてもある機能を入れたくて現在鋭意作成中です。
 
その機能とはキャッシュ機能になるのですが、つまりDBから値を取り出してそのままメモリに保持する機能なのですが、それが通常述語の評価(つまりSQLの発行)と透過的に行われれば幸せになるかと思ってます。
 
触発されたのは、ちょっと前の記事になりますが、以下のMixiの障害です。
 
『mixi』のアクセス障害のお詫び及び復旧に関するお知らせ  
2週間前の障害ですが、原因はmemcachedと呼ばれる分散型のメモリキャッシュシステムらしいです。大規模システムではこのようなキャッシュが良く使われているらしいです。
 
私自体はmemcachedは使用したことは無いですが、キャッシュの必要性は理解しておりますし、SQLの実行パフォーマンスについて 2010で書いているとおりオンメモリで処理を行うことによりパフォーマンスが上がるケースもあると指摘しておりましたが、ADPでは、もっと簡単にキャッシュが使えたらなということで、キャッシュ機能をサポートします。
 
もっともちょっと難航しておりまして、わざわざこのように『次回リリース予定の機能』と書いたのは自身のモチベーションを上げる為だったりします。

2010-08-26 | コメント:0件

[ADP開発日誌]Ver0.5アルファ版 リリース

ADPの開発版(Ver0.5)をリリースしました。

SourceForge.JPにてリリースしております。GPLで公開します。
以下のページからソースおよびプロジェクトファイルがダウンロードできます。
http://sourceforge.jp/projects/adp/
以前、[ADP開発日誌]ソースコードを公開するか?でソースは公開しないと言っていましたが、結局ソースで公開します。Windows版の方はバイナリ版も公開しています。

理由ですが、知人にMacOSXでコンパイルして頂いたのですが、コンパイル自体は通ったということで案外移植性が高いソースのようで、『ならばソース公開していろんな人に使ってもらった方がよいな』ということで公開しました。

実際に触りだすとあれやこれや色々いじりたくなり、そういう意味ではソース公開してちょこちょこリリースした方が活動状況も解ってよいかなというのもあります。まぁ何はともあれ後はドキュメントとサンプル(とテストプログラム)に集中したいのですが、またソース修正したりするかもしれません・・・。

P.S. Mさんへ、GitHubではなくてSourceForge.JPで公開でしました。GitHubも考えたのですが、諸事情によりSourceForge.JPの方が使いやすかったのでとりあえずこちらで公開しましたです。せっかく教えて頂いたのですがすみませんです。
2010-07-30 | コメント:2件

[ADP開発日誌]経済ゲームを作ってみよう

最近ADP関連のブログの更新がありませんでしたが、久しぶりのADPの布教活動を。

今年も飛び交う「日本みたいになるぞ」報道に書かれていますが、日本の失われた10年は海外でも悪い見本と取られていますが、もっと驚くことに、引用しますと、

デフレというおなじみのお化けがアメリカ経済の懸念材料として再登場している。(中略)日本のデフレを10年以上も研究した結果、エコノミストたちは次第に、自分たちはデフレの仕組みを何も分かっていないと気づき始めている
にありますとおり、デフレの仕組が解っていない事実に、なるほどと思うとともに『エコノミストは何をやっとんのじゃ!』というある種の憤りを感じたりする。特にソフトウェアエンジニアはコンピュータが動かないとお客からのある種のプレッシャーを感じるのだが、『エコノミストは、この日本の状況下である種の責任感とか使命感とかには駆られないのだろうか?』とか色々考える。

もっとも多くの人も何かおかしいということに気づいているかとは思うのですが、『ではどうやって解決するの?』と思われるでしょう。そ・こ・で、ADPの登場です!(ってかなり強引な宣伝です)。つまり、あ~だ、こ~だと議論ばかりに頼らずにもっと科学的にシミューレーションのような手法を使ってデフレのメカニズムの解明とかの研究をしませんか?という提案です。

ADPですが、Another Data Processorの名前のとおり、経済シミュレーションのようにややこしいシステム(真面目な言葉を使えば複雑系)を容易に記述できるようにというコンセプトで開発を行っています。
サンプルでちょっとした経済ゲームを作成してみました。
ソースも添付しましたので参照して頂ければ解るかと思いますが、様々な条件や計算を行うシステムでも比較的スッキリと記述できるかと思います。

ちなみに、ゲーム自体は興味本位で作成したのですが、作成したモデルですが、製品を無限に作成できる場合、人口は安定的に増える。ので上限を設けたら、今のところ安定的に人口増加するパラメータが見つかっていません。見つけた人は連絡を!

2010-07-28 | コメント:0件
Previous Page | Next Page