System.Numericsは速い

提供: MonoBook
ナビゲーションに移動 検索に移動

「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-01LXamarin.Androidでも試してみたが、System.Numericsの方が2倍くらい速い。