トライ木と呼ばれるデータ構造を作成します.
retrievalからtrieなので, treeと同じ発音だそうですが, 日本語ではトライだそうです.
各ノードがそれぞれラベルを持ち, 部分木は共通の接頭辞を持ちます.
"add", "and", "ans"からなるトライ木は以下のようになります.
前処理のための中間データとして作成したため, 効率は考慮していません.
2016年7月29日金曜日
population count
32bitのpopulation count
1のビットを数え上げる
コンパイラ組み込み関数を使わない場合,
1のビットを数え上げる
コンパイラ組み込み関数を使わない場合,
inline u32 population_count(u32 v)
{
v = (v & 0x55555555U) + ((v>>1) & 0x55555555U);
v = (v & 0x33333333U) + ((v>>2) & 0x33333333U);
v = (v & 0x0F0F0F0FU) + ((v>>4) & 0x0F0F0F0FU);
v = (v & 0x00FF00FFU) + ((v>>8) & 0x00FF00FFU);
return (v & 0x0000FFFFU) + ((v>>16) & 0x0000FFFFU);
}
gccの組み込み関数,int __builtin_popcount(unsigned int x)VCの組み込み関数,
unsigned int __popcnt(unsigned int value)
2016年7月8日金曜日
C#クロージャのUnity3Dにおけるコストについて
前回に引き続きクロージャです.
クロージャを実現するために, コンパイラは裏側でクラスを作成します.
もしスマートフォン向けのアプリケーションを開発しているのならば,
これだけでも高いコストを支払っています.
かなり強引な例ですが, 以下のようなコードの場合を考えます.
Destroyボタンを押してから, Unloadボタンを押してもテクスチャは解放されません.
Clearボタンを押してから, Unloadボタンを押すことで解放されます.
クラスはどこかから参照されているかぎり, ガーベージコレクタによって削除されません.
明らかにLoaderの実装に欠点がありますが,
texture変数は, コード上ではスコープから外れて参照が切れているように見えてしまっている、
ことも問題です.
クロージャを実現するために, コンパイラは裏側でクラスを作成します.
もしスマートフォン向けのアプリケーションを開発しているのならば,
これだけでも高いコストを支払っています.
かなり強引な例ですが, 以下のようなコードの場合を考えます.
Destroyボタンを押してから, Unloadボタンを押してもテクスチャは解放されません.
Clearボタンを押してから, Unloadボタンを押すことで解放されます.
クラスはどこかから参照されているかぎり, ガーベージコレクタによって削除されません.
明らかにLoaderの実装に欠点がありますが,
texture変数は, コード上ではスコープから外れて参照が切れているように見えてしまっている、
ことも問題です.
2016年6月18日土曜日
2016年5月7日土曜日
_mm_load1_ps(_mm_load_ps1), _mm_set1_ps(_mm_set_ps1)
_mm_load1_ps(_mm_load_ps1)と, _mm_set1_ps(_mm_set_ps1)
どちらも, movssとshufpsになる.
最初から参照のものは_mm_load1_ps,
定数や参照でないものは_mm_set1_ps,
という使い分けでいいと思われる.
_mm_load1_psの存在意味がわからないな.
他のロード系命令との対応と, _mm_set1_ps(*x)と書かなくてもよいぐらい?
ポインタのエイリアスを意識したプログラムを書いてないので,
ここだけ頑張っても, という気もする
どちらも, movssとshufpsになる.
最初から参照のものは_mm_load1_ps,
定数や参照でないものは_mm_set1_ps,
という使い分けでいいと思われる.
_mm_load1_psの存在意味がわからないな.
他のロード系命令との対応と, _mm_set1_ps(*x)と書かなくてもよいぐらい?
ポインタのエイリアスを意識したプログラムを書いてないので,
ここだけ頑張っても, という気もする
登録:
投稿 (Atom)
