私はジュリアとその性能に関する多くの記事を読んでいます。しかし、どこで、私はjuliaチームがマトリックス操作のために列メジャーを使用することにした理由についての手がかりを見つけることができます。それはマトリックス上で操作する方法が列のメジャーまたは何かに適合するからです。なぜJuliaは列メジャーを使用していますか?それは速いです
アドバンスありがとうございます。
私はジュリアとその性能に関する多くの記事を読んでいます。しかし、どこで、私はjuliaチームがマトリックス操作のために列メジャーを使用することにした理由についての手がかりを見つけることができます。それはマトリックス上で操作する方法が列のメジャーまたは何かに適合するからです。なぜJuliaは列メジャーを使用していますか?それは速いです
アドバンスありがとうございます。
「ジュリア多次元配列は列優先順に格納されているこれは、アレイは、一度に1つの列に積層されていることを意味する。これは、VEC関数または構文使用して検証することができる。[する:] ...」
"配列の順序付けのこの規約は、Fortran、Matlab、およびRのような多くの言語で共通しています(列名の順序は、CやPythonで採用されている規則です) )他の言語の間で。
例や性能の違いについての議論のためのhttps://docs.julialang.org/en/latest/manual/performance-tips/
"アレイは連続してメモリに格納され、CPUのベクトル化やキャッシングによるメモリアクセスの減少に役立ちます。これは、列優先順序で配列にアクセスすることが推奨されるのと同じ理由です(上記参照)。 " –
なぜDNAらせんをこの方法や他のではないのですか?この決定は、ほとんどの歴史的な対称性に起因するもので、ビットスイッチングコストが追加されたものです。 –
私は実際にDNAについて知りません。しかしパフォーマンスでは、Cと多かれ少なかれ類似していました。だから、彼らは列メジャーではなくメジャーを選択した理由があるかもしれないと感じました。 –
ほとんどの計算は、すべての変数を転置して書き換えることができます。これは行を列に変換します。選択された順序は、一方のベクトルの方が他方のベクトルよりも速く乗算されます。一度選択すると、選択肢をアルゴリズムの残りの計算すべてに伝播する必要があります。具体的には、「w * A」を乗算することは「A * v」よりも遅い。したがって、答えがあります:人々は 'A * v'を好む –