まず、マルチスレッドは無意味です。GVLがあるため、マルチコア環境でもコアは一つ分の計算しかされません。スレッド切り替えがあるため、むしろ遅くなります。 かといってマルチフォークは微妙です。計算対象が大量にある場合、コア数分だけ区切りを付けて走らせれば意味がありそうですが、一つあたりの計算量が少ない場合はプロセス間のやり取りを行う処理の方が負荷が高く、良い結果は得られないでしょう。 ということで、シングルスレッドのまま高速化を考えました。 まずは、ループを回すはuptoやRangeを使う、配列はmapで作る、むしろzipを使って添字アクセスをなくすというものです。後述のベンチマークの結果を言うと、ちょっと遅いぐらいと言う結果でした。コードがRubyらしくなるというメリットしかえられないでしょう。 次に標準添付のmatrixライブラリを使うことです。Matrix#entrywise_prod
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く