「System.Numericsは速い」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
 
3行目: 3行目:
 
System.Numericsの[[ソースコード]]は公開されているので比較してみたが、そんなに速度差がでるはずがない。どちらも超シンプルなソースコードだし。
 
System.Numericsの[[ソースコード]]は公開されているので比較してみたが、そんなに速度差がでるはずがない。どちらも超シンプルなソースコードだし。
  
* https://github.com/microsoft/referencesource/
+
*https://github.com/microsoft/referencesource/
  
 
もしかしてSystem.Numericsは[[.NET]]の[[ランタイム]]で特殊な[[アクセラレーション]]が掛かっているのではということで検証してみた。
 
もしかしてSystem.Numericsは[[.NET]]の[[ランタイム]]で特殊な[[アクセラレーション]]が掛かっているのではということで検証してみた。
28行目: 28行目:
  
 
;Debug
 
;Debug
 +
 
*前者:14.149秒
 
*前者:14.149秒
 
*後者:82.284秒
 
*後者:82.284秒
  
 
;Release
 
;Release
 +
 
*前者:0.903秒
 
*前者:0.903秒
 
*後者:3.418秒
 
*後者:3.418秒
 
=== 備考 ===
 
[[AQUOS sense2 SH-01L]]と[[Xamarin.Android]]でも試してみたが、System.Numericsの方が2倍くらい速い。
 
  
 
==結論==
 
==結論==
42行目: 41行目:
  
 
めっちゃ加速されてた。
 
めっちゃ加速されてた。
 +
 +
== 備考 ==
 +
[[AQUOS sense2 SH-01L]]と[[Xamarin.Android]]でも試してみたが、System.Numericsの方が2倍くらい速い。

2022年5月27日 (金) 06:02時点における最新版

「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倍くらい速い。