Clojureを使用して複数のCPUにスケーリングするときの、CPUバウンドアルゴリズムの動作を調査しようとしています。このアルゴリズムは、連続する整数の大きなシーケンスを入力として受け取り、シーケンスを指定された数のサブシーケンスに分割し、mapを使用して各サブシーケンスに関数を適用します。マップ機能が完了すると、reduceを使用して結果が収集されます。
完全なコードはGithubで入手できますが、サンプルは次のとおりです。
(map computation-function (partitioning-function number-of-partitions input))
このコードを12コアのマシンで実行すると、使用中のコアが1つだけであると予想されるときに、ほとんどのコアが使用されていることがわかります。
理想的にはpmap
、指定された数のスレッドを使用するために使用したいのですが、1つのスレッドのみを使用してコードを実行させることはできません。
では、Clojureは計算を複数のCPUに分散していますか?もしそうなら、この動作を制御するために私ができることはありますか?