F#でレイトレーサーを作っていてArray.Parallelモジュールを使って処理を並列化したら、CPU使用率が40~50%くらいまでしか上がらない現象が発生しました。原因を調べたら.NETランタイムのGCの設定を変更することで解消できたので記事にまとめます。 現象 以下が並列化している個所のコードで、640 x 480の解像度の画像を生成する場合、あるピクセルの色を計算するrenderPixel関数が640 x 480 = 307,200回呼び出されます。また、renderPixel関数では最大1万回シーンオブジェクト(球など)との衝突判定と色の計算が行われ、そのときにベクトルの計算(和や内積など)を大量に行います。 let render scene (width : int) (height : int) = let coords = seq { for y in 0..(height