JavaがHPC分野で使われない理由
JavaがHPC分野で使われない理由は多次元配列のメモリ構造にある。
ここでは簡単に2次元配列を考えてみよう。
Javaの場合、指定行の要素分の配列が列数分あり、それぞれの行配列のアドレスを指す配列がさらに別にあり、
要素にたどり着くのに、二段階のアドレス参照の手続きを踏む。
C言語であれば、指定行の要素分の配列の後に連続して次の列の行の配列が、と連続的にメモリを確保するため、
要素にたどり着くために、一発のアドレス参照(i*N+j)*sizeof(type)で簡単にアクセスできる。
C++もCに同じ。Fortranは列と行の並び方がC/C++と逆だが、やはり連続的にメモリを確保するため要素のアクセス
は一発のアドレス参照で済む。
Pythonは配列(行列)の扱いをNumpyに任せて、Cで実装しているからJavaよりマシである。
Juliaはどうだか調べていない。
他にも理由はあるが、これはかなり痛い仕様である。
JavaがHPC分野で使われない理由は多次元配列のメモリ構造にある。
ここでは簡単に2次元配列を考えてみよう。
Javaの場合、指定行の要素分の配列が列数分あり、それぞれの行配列のアドレスを指す配列がさらに別にあり、
要素にたどり着くのに、二段階のアドレス参照の手続きを踏む。
C言語であれば、指定行の要素分の配列の後に連続して次の列の行の配列が、と連続的にメモリを確保するため、
要素にたどり着くために、一発のアドレス参照(i*N+j)*sizeof(type)で簡単にアクセスできる。
C++もCに同じ。Fortranは列と行の並び方がC/C++と逆だが、やはり連続的にメモリを確保するため要素のアクセス
は一発のアドレス参照で済む。
Pythonは配列(行列)の扱いをNumpyに任せて、Cで実装しているからJavaよりマシである。
Juliaはどうだか調べていない。
他にも理由はあるが、これはかなり痛い仕様である。