mb_check_encodingのUTF-8バリデーションにNEONを追加しようとして挫折した(1回目)
TOP > てきとうにこらむ > ゲーム作りとプログラミング日記 > mb_check_encodingのUTF-8バリデーションにNEONを追加しようとして挫折した(1回目)
UTF-8バリデーションを加えようとして挫折した
SIMDというのは、一つの命令で複数のレジスタを扱えるので、画像や音楽などにつかわれてきた。
昨今になってきて、SIMDは文字列でもできるということがわかってきた。simdjsonなんかがその代表だと思う
UTF-8のバリデーションにSIMDを使う
もちろん、UTF-8でもできることがわかったのでValidating UTF-8 In Less Than One Instruction Per Byteのような論文がでてきた。そこで、AlexさんがSSEやAVXのようなx86系統のSIMDを加えた。NEONはARMのSIMD
ところが、Raspberry PiやM1 macOSのようなARMのCPUにはそのような最適化は入っていないのでARMにも加えようとしたらhttps://github.com/cyb70289/utf8のコピーのようなものが出来上がってしまった。
課題
- Alexさんの指摘の通り、ループ中にマスクの変数を定義するのは無駄なのでなくしたい
- objdumpを用いてディスアセンブルできるようにする
- NEONやRaspberry Piともっとお友達になる