てきとうなさいと べぇたばん

mb_check_encodingのUTF-8バリデーションにNEONを追加しようとして挫折した(1回目)

TOP > てきとうにこらむ > ゲーム作りとプログラミング日記 > mb_check_encodingのUTF-8バリデーションにNEONを追加しようとして挫折した(1回目)

「非常に熱心なRaspberry Pi愛好家」とあるのでRaspberry Pi愛好家にならんといけん

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ともっとお友達になる

2023/04/15 16:06