● ぼくのかんがえたさいきょうのmemcpy()
※ただしC言語に限る
https://github.com/rarul/algorithm_bench/blob/master/memcpy/common/memcpy.c
- 実用上は32bitか64bitの2か4のループアンローリングくらいで十分っぽい?
- gccの-O3だとヘタに自分で展開するより早かったりする、勝手にループアンローリングやってる?
- __int128のgcc拡張が使えるという知見を得た(gcc-4.4.7は使えなかった)
- alignment合ってなくてもCPUでなんとかしちゃうx86ずるい
- x86_64は、alignment乗ってると早いし、乗ってなくてもちゃんと動くし、alignmentチェックする価値がなさそう
- __int128は、x86_64でもalignmentエラーで落ちた
- 結局glibcのmemcpy()が一番早い、次点でgcc -O3
- asm使った最適化は猛者の総ツッコミが来そうなので語らないことにする
● その他
ネタはあったはずなのに最近やる気が出なくて作業が進まない...