javaの数値演算ライブラリのujmpは高機能そうだけど、それゆえ遅いんじゃないか。
そう思って自分で書いた行列掛け算と比較してみたら……
正確な数値は記録しなかったけど数十倍違う。
ファ!?
なんで!?
だってJavaだよ!
アセンブラとかで最適化出来ないんだよ!
なんで!?
と調べてみると、どうやらメモリアクセスが連続になるようにデータを詰めてから計算している模様。
要は行列の掛け算って、左の行列の行方向と右の行列の列方向をなめて足し算していくわけだけど、
普通にやるとどちらか片方の行列へのアクセスが飛び飛びの番地になる。
飛び飛びになる部分を先に別の配列に詰めておいてからそこから読んでいる。
自分も真似てみるとたしかに10倍早くなった。
うを……メモリアクセスの考慮がこんなにきくとは。
しかしそれでも数倍違う。
どうもujmpはマルチスレッドでCPUのパイプラインに命令を詰め込んでいるので効率がいいっぽい。
すげ~。
高機能すぎて遅いんじゃないかという懸念は完全に払拭された。
アセンブラでもないのにJavaでコーディング次第でこんなにパフォーマンスを改善できるとは驚き。
すごいもんだ~
それからergoproxyを一気に全部見てしまった。
うう、やりすぎ。
でも見始めると止まらないんだよな。
今日捨てたものはメモ。
体重64.9kg。
あれ、なぜか減った。