2011-11-12 8 views
1

最終ポスト(下から4番目かそこらパラ)に言及here OP:削減呼び出し、与えられたヒープ割り当てられたオブジェクト

「今、いつもこのことについて、私を気に一つのことがすべてです子が ポインタチェック。多くのnullポインタがあり、 は、メモリアクセスを待って、0でキャッシュを埋めるように見えます。 愚かです。時間がたつにつれて、1または0を含むバイトを追加して、それぞれ ポインタはNULLです。最初はキャッシュを減らしました しかし、私は9距離の比較、8ポインタを管理しました ビット、および3方向ビットのすべてをいくつかのテーブルに渡し、ロジックを は、ケースが ポインタチェックをスキップし、関連する子のみを直接呼び出すことができるように単一のスイッチ変数を生成します。それはあなたがこのバージョン見 を持っていない場合を説明するために速く上記以外 実際にはあるが、多くの困難。」

彼は、リアルタイムのボリュームレンダリングのためのデータ構造としてオクトリを参照している。これらの

(a)メモリアクセスを待っているという前提はありますか?私の理解は、彼が言及していることです動的にallocを使用するときに一般的にあまりにも良い参照のローカリティのためにキャッシュ内に見つからないと仮定しているので、データをフェッチするためにメインメモリに完全に実行されるのを待っているated octree(この種のアプリケーションではこのデータ構造に共通)

(b)の(a)は、私はそれぞれの場合伝えるために1または0を含むバイトを追加する方法この回避策

時間にわたって把握しようとしています、真実であることを証明するべき ポインタはNULLです。

ヒープを使用依然としてことなく実施し、私はそれはオクツリーノードに格納される必要があると仮定するので、したがって、依然として、同じオーバーヘッドを招くことになります。

+0

この質問は本当に難しいですか?私は、少なくとも(b)は、ここの周りの一人が光を当てるのは簡単だろうと思っていたでしょう。 –

答えて

0

(a)はい、メモリ待機時間に関する懸念があります。この場合、彼はメモリ内のノード自体のサイズを心配しているようです。子供だけが8つのポインタをとります.64ポインタは64ビットアーキテクチャでは、1つのキャッシュラインは子供のためだけです。

(b)このビットフィールドはノード自体に格納されていますが、現在は1バイト(8ポインタでは1ビット)しか使用しません。しかし、子供を含む行が検索されると、とにかく読み込まれるので、これは利点であると私には分かりません。しかし、彼は明らかにいくつかのビット・トリックを行っているので、どの子供がほとんどのブランチで検索するかを決めることができ、パフォーマンスが向上する可能性があります。私は彼に利益を示すベンチマークがあることを願っています。

関連する問題