System.Numericsは速い
2020年5月25日 (月) 06:54時点におけるAdministrator (トーク | 投稿記録)による版
「System.NumericsにはMatrix3x3」がないという理由で作っている自作のNumericsなライブラリとSystem.NumericsのVector3の速度比較を行ったところ、絶望的などほど自作の方が遅かった。ざっくり8倍くらい遅い。
System.Numericsのソースコードは公開されているので比較してみたが、そんなに速度差がでるはずがない。どちらも超シンプルなソースコードだし。
もしかしてSystem.Numericsは.NETのランタイムで特殊なアクセラレーションが掛かっているのではということで検証してみた。
条件
比較対象
- System.Numerics
- System.Numericsのソースコードの名前空間を書き換えたもの
検証機材
- Mac mini (2018)
- 3.2 GHz 6コアIntel Core i7
- 16 GB 2667 MHz DDR4
- macOS Catalina 10.15.4
- .NET Core 3.1 (Console)
検証
以下を10億回ループ
var x = new Vector3(a); var y = new Vector3(b); var z = new Vector3(c+1); return (x * y / z).Length();
- Debug
- 前者:14.149秒
- 後者:82.284秒
- Release
- 前者:0.903秒
- 後者:3.418秒
備考
AQUOS sense2 SH-01LとXamarin.Androidでも試してみたが、System.Numericsの方が2倍くらい速い。
結論
両者は同じものであるはずだが、前者の方が圧倒的に速い。
めっちゃ加速されてた。