thumb と arm assembly のプロファイルを raspberry pi でとった。
brainfuck interpreter に100000回くらいループしてもらってperf record でトレースをとって、perf report で確認。
UIで選択していったらどのアセンブリ命令にいるときに割り込みが起きたのかがわかっておもしろい。
アセンブリソースで記述したラベル(hoge:)が関数名として見えているのでどっかのレベルでデバッグ情報がはかれているのかな。まだ把握してない。
thumb と arm でナイーブに実装しただけでは実行時パフォーマンスに差がない。単純にarm のほうがコードサイズが倍になるのでこの場合はthumbのほうがよいということになるのかも。
あとプロファイル見てる限りだとループの境界チェックで定数のロードでメモリアクセスにいくところが遅いのでそこをレジスタに割りつけたら20%高速化した。
命令がどうとかよりメモリアクセスを減らすのが重要っぽい。
たとえば、cmpだと引き算しているのでもったいないなぁとteqでxorにしてみても特に高速化とかしてない気配。
aarch64は手元に実機がないのでプロファイルをとるたのしみがない。
↧