プログラミングの作業に何の価値も見出せなくなってしまったd金魚による日記 このページをアンテナに追加 RSSフィード

 iTunes Music Store(Japan) なかのひと あわせて読みたいブログパーツ
|

0001 | 00 |
2004 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 |
2008 | 01 | 02 | 03 | 05 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 |
2010 | 03 | 04 | 06 | 07 | 09 | 10 | 11 |
2011 | 01 | 02 | 10 |
2012 | 04 |
2013 | 01 | 05 | 06 | 07 | 08 | 10 |
2014 | 02 | 03 | 05 | 09 |
2015 | 04 |
2016 | 09 | 11 | 12 |
はてな一覧
アンテナに追加
私のアンテナ
私のダイアリー
私のアーカイブ
私のアイデア
私のブックマーク
私のグループ
私のキーワード
ニュース系、今まで続いているシリーズモノの読み物
dKingyo Utility Toolkit Projectのリリース情報
やっぱり暗号化は大人の味(笑)
プログラムのパッキング方法を調べよ
ココが厳しいよMinGW
ライブラリアン通信
ゲームプログラミングどうしよう
CRCについて
ビット演算練習
d金魚の今更Ajax
Windows Tips
VC6 Tips
Win32 WTL Tips
Ruby for C++ User
Ruby Tips
今日のRubyで嵌った事
正規表現PIECE
書きかけ
続く・・・

私のダイアリーの人気記事
新しくブックマークされた記事


あまり、役に立たなそうな個人的に調べた情報や妄想に耽った事、今 勉強している事ヒソヒソと公開していたりします。 | 登録してくれている方々 | d金魚にメール | 当サイトは640x480の画面解像度に対応しています。
日記へのリンク、アンリンクはフリーですが、selfタグのついている部分のコンテンツの引用はご遠慮願います。ご協力よろしくお願いします。


 | 

2004-12-12 メモリプールの速度テスト part2

[][][][]メモリプールの速度テスト part2 メモリプールの速度テスト part2を含むブックマーク メモリプールの速度テスト part2のブックマークコメント

詳しくは前回の日記を参照( d:id:studiokingyo:20041211 )

例の遅い私のメモリプールクラス(object_pool)をMemoryPoolクラスを参考にして組み直してReleaseビルドで速度テストしてみた。

ranking_timer

1 / MemoryPool deallocate / プールに戻す / 90288.000000

2 / object_pool recycle / プールに戻す / 94524.000000

3 / object_pool allocate / プールから確保 / 180745.000000

4 / MemoryPool allocate / プールから確保 / 749871.000000

5 / object_pool deallocate / free()を使い開放 / 44515494.000000

見事に勝った。(多分)

しかし、偶にはこう言う結果もある。

ranking_tiemr

1 / MemoryPool deallocate / プールに戻す / 90187.000000

2 / object_pool recycle / プールに戻す / 95824.000000

3 / MemoryPool allocate / プールから確保 / 713557.000000

4 / object_pool allocate / プールから確保 / 727922.000000

5 / object_pool deallocate / free()を使い開放 / 37413646.000000

まぁ、どっちもどっちって事で・・・イイよね?

これで堂々とobject_poolクラス(DKC_SAME_OBJECT_POOL機構をラップしたクラス)を使える。

次期リリースのdkutil_cにぶち込む予定なのでヨロシク。*1

[]allocatorを関数ポインタにしたら・・・ allocatorを関数のポインタにしたら・・・を含むブックマーク allocatorを関数のポインタにしたら・・・のブックマークコメント

ranking_tiemr / clock type : RealCPUClock /compile mode : DEBUG

1 / MemoryPool deallocate / プールに戻す / 529877.000000

2 / object_pool recycle / プールに戻す / 699042.000000

3 / MemoryPool allocate / プールから確保 / 2192181.000000

4 / object_pool allocate / プールから確保 / 2311246.000000

5 / object_pool deallocate / free()を使い開放 / 118126154.000000

なんか、遅くなっちゃいました^^;

前の状態に戻すか?

まぁ、イイか。この位だったら・・・


さらに・・・ boost::poolとも勝負しました。

ranking_tiemr / clock type : RealCPUClock / compile mode : RELEASE

1 / boost::pool deallocate / free / 37041.000000

2 / MemoryPool deallocate / プールに戻す / 91047.000000

3 / object_pool recycle / プールに戻す / 97376.000000

4 / MemoryPool allocate / プールから確保 / 706405.000000

5 / object_pool allocate / プールから確保 / 724847.000000

6 / boost::pool allocate / malloc / 1042658.000000

7 / object_pool deallocate / free()を使い開放 / 54364155.000000

なんか、object_poolが遅くなったなぁ〜

多分allocate系をinline展開ではなく関数ポインタにしたのがなぁ〜。

まぁ、イイか。この位だったら・・・

それにしても、boost::poolが遅いなぁ・・・なんでだろ?


やっぱり、速度が遅いのが許せなかったので・・・

デフォルトロケータの場合はインライン展開されるコードが使われるように修正・・・

ranking_tiemr / clock type : RealCPUClock / compile mode : RELEASE

1 / boost::pool deallocate / free / 37208.000000

2 / MemoryPool deallocate / プールに戻す / 89253.000000

3 / object_pool recycle / プールに戻す / 98001.000000

4 / object_pool allocate / プールから確保 / 714171.000000

5 / MemoryPool allocate / プールから確保 / 736834.000000

6 / boost::pool allocate / malloc / 1199485.000000

7 / object_pool deallocate / free()を使い開放 / 60298349.000000

それにしても、boost::pool のdeallocation(freeメンバ関数)はメチャクチャ速い

ちとソースを見てみよう。

void free(void * const chunk)
{      
  nextof(chunk) = first;

  first = chunk;
}
// for the sake of code readability :)
static void * & nextof(void * const ptr)
{ 
  return *(static_cast<void **>(ptr)); 
}

上手い!!!非常に上手い!!!特にnextofの所。

次へのポインタが格納されているのはメモリの先頭なのでいちいちアロー演算子を使ってアクセスしていない。

でも、速度アップの効果あるのかな?

アセンブラ読めないから良く分からない・・・むぅ

メモリプール最終計測

small test(16 byte )

ranking_tiemr / clock type : RealCPUClock / compile mode : RELEASE

1 / boost::pool deallocate / free / 35287.000000

2 / object_pool recycle / プールに戻す / 97255.000000

3 / MemoryPool deallocate / プールに戻す / 109396.000000

4 / object_pool allocate / プールから確保 / 684469.000000

5 / MemoryPool allocate / プールから確保 / 722633.000000

6 / boost::pool allocate / malloc / 1203381.000000

7 / object_pool deallocate / free()を使い開放 / 54946018.000000

big test(5120 byte )

ranking_tiemr / clock type : RealCPUClock / compile mode : RELEASE

1 / boost::pool deallocate / free / 39627.000000

2 / object_pool recycle / プールに戻す / 217613.000000

3 / MemoryPool deallocate / プールに戻す / 274475.000000

4 / boost::pool allocate / malloc / 1216813.000000

5 / object_pool allocate / プールから確保 / 2407761.000000

6 / MemoryPool allocate / プールから確保 / 2421483.000000

7 / object_pool deallocate / free()を使い開放 / 1790078212.000000

なんかboost::poolはデカイデータにはめっぽう強いみたいなんですけど!!!?

むぅ〜。

と、言う事で、

プールクラスの使いどころ

で、いいのかなぁ?

むぅ〜。

[][]テストに使ったバイナリリリーステストに使ったバイナリをリリース。を含むブックマーク テストに使ったバイナリをリリース。のブックマークコメント

スマン、ソースコードは次期DKUTにぶち込みますので^^;

そのテストアプリケーションバイナリ自己満足の所に用意したので興味のある方はダウンしてみるの一興かと?

http://www33.tok2.com/home/dca/dkutil.html

http://www.dkut.flnet.org/dkutil.html#zikoman

*1:でも事実C言語移植したプール機構にどれだけの需要があるのやら・・・(´Д⊂グスン

トラックバック - http://d.hatena.ne.jp/studiokingyo/20041212
 | 
Program | Debug | dKingyo Utility Toolkit | library | D言語 | 御本とか | 備忘録 | テクニック | WayBack | 格言 | 英語 | 他力本願 | news | software |

デースケドガー