組み込みのpopcountつよすぎる(実はそんなにつよくなかった)

水曜日です。


労は期末なので、比較的穏やかな日でした。他部署の方とお昼を食べるなどの圧倒的コミュニケーション力を発揮しました。

労自体は一進一退という感じで、なかなか思うような結果が出ません。焦らず着実に知見を貯めていきたい。


帰りの電車で、オリンポスの郵便ポストを読み終わりました。とてもよいラストでした。


帰宅後はNavarro本のpopcount実装を楽しみました。本には2パターンの実装例がありました。ふと、組み込みのpopcount命令(_mm_popcnt_u64())とどのくらい差があるのか気になり、試してみました。結果は圧倒的に組み込み命令が速く、なんだこれはという気持ちでした。264回実行させてみた累計時間が、Navarro本実装だと計測不能(少なくとも数分で返ってこない)なほど遅かったのに、組み込み命令は0msでした。なんだそれ・・・。

今までハード属性が苦手だったので組み込み命令は使ってなかったのですが、これほど差があるなら採用も検討したい。と思ったのですが、べた書きで_mm_popcnt_u64()をすると(たぶん)コンパイル時の最適化で何もしなかったことになるっぽいです。適当に関数から呼ぶようにしたらNavarro実装をより少し速い程度でした。残念。

なお、組み込み命令のpopcountについては以下の記事を参考にしました。

qiita.com


以上です。昨日のうちにけフを見てしまったので、今日はアニメ視聴もなく早寝です。