2004-07-01から1ヶ月間の記事一覧

結論

vectorをPODのバッファとして使うのは(よほどシビアな要求が無ければ)十分に可能だろうと思います.ただし,vectorの正しい使い方を熟知していないと余計なオーバーヘッドを生じさせると思います(こっちの結論はやっているうちにどうでも良くなってきた)…

考察その4:gcc3.2.2におけるresizeのオーバーヘッド

gcc3.2.2ではresizeにuninitialized_fill_nが使われていますが,これはcharの場合最終的にmemsetで実装されます.char以外のPODの場合,for文+代入が使われるのでさらにオーバーヘッドがかかると予想されます.

考察その3:ポインタを使ったstd::copyとイテレータを使ったstd::copyの違い

VC++7.1では,PODのポインタに対するcopyはmemmoveで実装されています.(なので,resize + memcpyとほとんど同じになる.)一方,std::vector::iteratorに対するcopyは(memmoveで実装しても安全であろうと思われるのにも関わらず)for文+代入で実装されて…

考察その2:VC++7.1のresize + memcpyにおけるオーバーヘッド

resize時に要素が初期化されるため,その分遅くなっています.昨日はvalue_typeがcharの場合memsetで実装されると書きましたが,実際にはfor文 + placement newでした.

考察その1:VC++7.1におけるpush_backが異常に遅い理由

理由は恐らく実装がアホだからです.VC++7.1のpush_backは何故かuninitialized_fill_nで実装されています.これがpush_backの効率を大きく落としていると思われます.その傍証としてconstructで実装されているgccのpush_backには異常といえるオーバーヘッド…

gcc3.2.2の結果

vector::reserve + vector::push_back 1.7程度 vector::resize + vector::memcpy 1.7程度 vectorのイテレータ範囲コンストラクタ ベースラインに対するオーバーヘッドはほとんど見えません.(1.1以下?) vector::resize + vector::iteratorによるstd::copy…

VC++7.1の結果

vector::reserve + vector::push_back 6.0〜7.0程度 vector::resize + vector::memcpy 1.5〜1.8程度 vectorのイテレータ範囲コンストラクタ サイズが1MB以下ならベースラインに対するオーバーヘッドはほとんど見えません.サイズが大きくなると漸近的に1.1〜…

vectorがPODのバッファとして使えるかどうか?

vectorがPODのバッファとして使えるかどうか実験してみました.ただし,自分は精度の良い測定ができるフレームワークを持っていないので,大まかな結果だけ載せておきます. (´-`).。oO(地道にstd::clock()使って統計的に値を推定したなんて恥ずかしくて…

っていうかアルゴリズム周りはまだまだ最適化の余地ありますね・・・

traitsが標準化されれば,ここら辺での劇的な改善があると思うんですがどうなんでしょうか?ちなみに,vector::iterator + copyがmemmoveにdispatchされていると信じていたんですが,されてなくて超(´・ω・`)ショボーン

iterator範囲によるコンストラクタ

std::vector v(data, data + sz); PODに対して(というか,PODに限らずポインタとサイズが与えられたときにvectorを初期化する手段として)最善となるコードです.上のコードによって具体的に何がなされるかはおおよそ以下のとおりです. 引数のiteratorの差(…

resize + memcpy

std::vector v; v.resize(sz); memcpy(&v[0], data, data + sz); まず最初に1点.&v[0]のようにvectorの内部バッファを連続した配列とみなした上でCAPIに突っ込むのは標準で保証された安全な操作です.(ISO/IEC 14882-2003 23.2.4 -1-が論拠になります.後…

reserve + push_back

std::vector v; v.reserve(sz); for(int i = 0; i 通常,for文による明示的なループによる代入とmemcpyとの比較では圧倒的に後者に軍配が上がります.これはmemcpyが実装上の最適化を許されているからです.(確かCに関する本でこのmemcpyに関して論じていた…

std::vectorをPODの一時バッファとして使う

C++

>>d金魚さん(で良いのかな?名前間違っていたら本当にすいません) そのTest_VectorSpeedの実装だとvbの前1MBに0が詰まった後,後ろ1MBにdataが詰まると思います.なので,多分1回ぐらいvectorの内部バッファの再配置(とそれに伴うdelete & new)が起きる…

浮動小数点演算回数計測クラス

C++

浮動小数点演算(FLoating point Operation)の回数をカウントする以下のような非常に単純なクラスを作ってみました. #include #include template class flo_counter : public boost::unit_steppable, boost::euclidian_ring_operators, boost::euclidian_rin…

Chained Inheritance(鎖状継承とでも訳すべきですかね?)

C++

以下のようなクラス群を考えます. class nil_t{}; template class A : public Super { }; template class B : public Super { }; template class C : public Super { }; Aのテンプレート引数T1とT2,Bのテンプレート引数T,Cのテンプレート引数T1とT2は各々…

空の境界

仕事場の机に「空の境界 上・下」(asin:4061823612, asin:4061823620)を置かれてしまったんですが,これは要するに「読め」ということですか?そうですか・・・.

気になったリファラ その3

http://www.google.co.jp/search?q=overhead+container&hl=ja&lr=lang_ja&ie=UTF-8&start=80&sa=N 少なくともstd::vectorに関しては,私は「動的配列確保するくらいならstd::vector使っておけ」派なんですが,どうなんでしょうか?動的配列に対するoverhead…

気になったリファラ その2

http://www.google.co.jp/search?hl=ja&ie=UTF-8&q=STL+auto_ptr+%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A+%E7%9B%B8%E6%80%A7&lr=lang_ja ヾ(;´Д`)ノヤメテ!! とりあえず"Effective STL"読んでください.お願いします.この通りですorz. いや,auto_ptrと…

気になったリファラ その1

よそのブログでリファラについて言及しているのをちらちら見かけて,いつか自分でもやろうと思っていたんですが,今回気になるヤツがいくつかあったのでせっかくだから言及してみようかなと思います. http://www.google.com/search?q=template+rebind&hl=ja…

C++ Template Metaprogramming

http://boost-consulting.com/mplbook/ (`_ゝ´)フォォー!!!

std::deque

C++

某所で話題に上っていたせいで気になってstd::dequeの実装(P.J. Plaugerさんのヤツ)を覗いちゃったじゃないか!ヽ(`Д´)ノ ウワァァン!! おかげで2時間もいらんことに費やしてしまったじゃないか!ヽ(`Д´)ノ ウワァァン!! 最初circular queueで実装している…

PageRankで思い出しましたが

PageRankは,webページの重要度の指標だからPageRank ではなくて,Pageさんという人が考えたからPageRankという. http://citeseer.ist.psu.edu/brin98anatomy.html さぁ,何へぇ?

amazonのマイページなるものを初めて覗いて見ました

自分のマイページの内容(一部抜粋) asin:B0001E3CPK asin:0321125215 asin:B0001N1KTG asin:0471319201 asin:B00006GJDW asin:B0000DIZ4F asin:020170353X amazon凄い.っていうかTF-IDF + cosine(だと思う,多分.大手が持っているこういう技術のdetail…

参議院選挙

書き忘れてた.ちゃんと選挙には行きましたです.はい.

今日の収穫物 + α

今日のある瞬間における某氏のカバンの中身のスナップショット. 「しにがみのバラッド。」(asin:4840223939) 「しにがみのバラッド。2」(asin:4840224919) 「まんがタイムきらら 8月号」 「まんがタイムきららcharat 8月号」 「Modern C++ Design」 うむ.…

携帯電話の機種変更

機種変わはー!前の機種3年も愛用してたよ・・・. これで長年念願だった「(゜∀゜)キュンキュン!着信音」や「萌え萌え待ち受け画面」がようやく実現できる・・・。・゜・(ノД`)・゜・。 #全然関係ないですが,「きしゅ」の第一候補が「;y=ー==(゜∀゜)・∵.キ…

何故に特性が"non-intrusive"であることが重要か

A key feature of traits templates is that they're non-intrusive: they allow us to associate information with arbitrary types, including built-in types and types defined in third-party libraries, Normally, traits are specified for a particu…

dummy

dummy

dummy

dummy

ネラジ

http://hotwired.goo.ne.jp/news/news/business/story/20040702106.html 本当,既得利権を守ることに必死だなぁ.アメリカでこうなんだから,日本では何をいわんや. ちなみに自分は日本のpopとアニソンを交互に流してる海外の某ネラジと,小さなコミュニテ…