optimization

Userspace RCU

http://lttng.org/urcuUserspaceのRCUアルゴリズム実装。 半日ぐらいコード眺めてたけど、synchronize_rcu()でparityをなぜ2回パリティフリップ/同期してるのかわからん。Preemptive2-staged RCUの実装ぽいのでLWNの記事をもっとよみこむ。 http://lwn.net/A…

likely/unlikelyマクロ

http://kratcode.wordpress.com/2006/02/09/likelyunlikely-gcc-extensions/GCCの__builtin_expect拡張のラッパーマクロ。分岐の起きやすさを記述してやることによって効率的なコードを生成する。Linuxカーネルのコードを読んでると良く出てくるこのマクロ。…

std::vectorでのforeach検証

超適当検証なので結果は保障しません。逆アセンブリをみてみるとunrollはiterator使った場合でもされているようです。ただかなり単純な処理でないとunrollされないので、気にしなくてもいいみたいです。配列形参照を使ったほうが3倍早い結果になりましたが、…

vectorでのforeach

const int nCount = vec.size(); for(int i = 0; i < nCount; ++i) { vec[i]を使った何か }と std::vector<asdf>::iterator i, iEnd = vec.end(); for(i = vec.begin(); i != iEnd; ++ i) { *iを使った何か }はどっちが早いんだろう?どっちも理論的には同じくらい</asdf>…

メンバ変数のオーバーヘッド

DGCAアーカイバの作者さんによるループの最適化を読んで。 メンバ変数へのアクセスにオーバーヘッドがあることを失念していた。 よくよく考えてみればメンバ関数はthiscallで呼ばれるし、m_hogeと書いてあるのは実際はthis->m_hogeの略なんだよな。