「第67回カーネル読書会のビデオと資料」でnoocyteさんが素晴らしいコメントを寄せてくださっている。

一見の価値ありと思うので、ぜひ見てみて欲しい。


で、僕なりにちょっと補足させてもらうと

まずRISCにおいては mallocは8byte alignが事実上必須だよね。という指摘には完全に同意。
で、POSIXに書いてないのはCISCだと必須じゃないじゃーん。って事だと理解してる。
んで、noocyteさんはプラットフォーム非依存のmallocを書くとしたら、結局RISCの制約に引きずられて8byte align必須になるよねー
という話をしているように見える。

一方、みんな大好き僕らのx86はCISCの子孫なのでミスアラインアクセスが発生してもバスエラーにはならないが、SSE命令は16byte alignされてないと性能でないので、性能を意識するなら16byte alignにする必要がある。

じゃあ、なんで glibc malloc がそうなっていないの?
という疑問が沸くが、これがどうもよく分からない。

元々のdlmallocはlibcとは別の yet another malloc なので、CPU毎に#ifdefするのがイヤで
可搬性を考えて8byte alignにした。というのは十分にありえる話だが、
libc でそれをやる理由は解せない。

昔はSSE命令がなかったので、その時代の名残というセンも考えられるが、
SSE命令の使用頻度まで考えて、メモリ使用効率とのトレードオフまで考え抜いたすえに
8byte alignを選択した可能性も0ではない、と。そういう考え方もあるわけで

いや、実はこの問題は7月にLMSで話をしたときにも指摘されていたので既知の話で
かなり確信犯的に、当日は話をわざとぼやかして
聞かれたら答えるけども、自分からは言わないモードにしたわけだね。

大人って汚いね(^^;

#いいわけしとくと、当日は内容が多かったので時間が押していて
#講師自ら話を脱線させていくのは、厳しい状況だったんですよぅ(^^;;;


と、いうわけで、x86で16byte alignにするパッチを書けば性能改善する余地はあると思うので誰か試してみない?


しかし、かえすがえすも残念なのはnoocyteさんが当日来てくれていたら、その後の宴会で盛り上がれたのは間違いないと確信できるところ。
いつかぜひお会いしたいものである。



働く車_前働く車_後ろ
にげろーーー、ランキング!