今までIntelからRISC-VなどのプラットフォームにLinuxアプリケーションを移植する議論を行ってきたが、実は、すべての最適化及び、移植作業において、「処理の等価性チェック」のフレームワークが必要なのではという結論に達した。
すべての最適化において、処理は高速化してほしいが、多くの場合処理内容はほんの僅かでも変わってほしくない。処理内容が変わったら深刻なバグやエラーや事故を引き起こす。
よって、コンパイラ設計者としては、処理の速度より、処理の等価性を優先して設計することとなる。よって、思い切った最適化は行えなくなり、ソフトウェアは年月を経るごとに重くなっていく。
従来はムーアの法則などにより、ソフトウェアは重くなっても処理を速くすることができたが、今後は期待できるかどうかはわからない。
それはIntelからRISC-Vにポートする作業においても同じである。ポートする手法としては、自動ベクトル化を使う方法や、Universal IntrinsicやLinux on Power porting guideのように特殊なラップ構造を取ってやる方法などがあるが、全てにおいて共通するのは、処理が等価である必要性である。処理が等価でないと、ポートしたことにはならない。
僕が考えている処理の等価性チェックは、数学的な手法ではなく、2つの等価性を比較するモジュールにおいて、入力値をある程度ランダムに決めてやり、2つのモジュールに入力して、出力が同じであることを確認する方法である。
ネットワーク接続などは使用せず、ファイル転送やHDD、USBメモリの差し替えなどによって、データを転送する。よってネットワークで相互接続する必要はない。
ある意味力任せに等価性チェックする手法である。
つまるところ今まで異なるCPU間でポートや最適化が難しかったのは等価性の保証が難しかったからで、等価性の保証が簡単になればポートも簡単になる可能性がある。
LinuxのIntel x86のIntrinsic関数をRISC-VやARM用にポートする(11)
Last updated at Posted at 2024-10-21
Register as a new user and use Qiita more conveniently
- You get articles that match your needs
- You can efficiently read back useful information
- You can use dark theme