私はいくつかの例を実行し、私はいくつかの結果を得ました。私は大きな反復回数を得ましたが、良い結果を得ることができましたが、反復回数が少なければ悪い結果を得ることができます。@parallel対juliaのネイティブループ
私は少しオーバーヘッドがあり、それは絶対に大丈夫だと知っていますが、反復回数が少ないループを連続的な方法よりも並列的に実行する方法はありますか?
x = 0
@time for i=1:200000000
x = Int(rand(Bool)) + x
end
7.503359秒(200.00 M配分:2.980ジブ、2.66%のGC時間):私はここに、並列のための良好な結果を得た
x = @time @parallel (+) for i=1:200000000
Int(rand(Bool))
end
0.432549秒(241.138 KiBの3.91 Kの割り当て)次の例ではそうではありません。
x2 = 0
@time for i=1:100000
x2 = Int(rand(Bool)) + x2
end
0.006025秒(98.97 K割り当て:1.510 MIB)
x2 = @time @parallel (+) for i=1:100000
Int(rand(Bool))
end
0.084736秒(3.87 K割り当て:239.122 KiBの)
私は、スレッドを使用することのオーバーヘッドは一定の回数の反復の後にやっていると思っています –
@MauricePerryこれはスレッドではなくマルチプロセッシングです。マルチプロセッシングは、完全に非同期であり、他のコンピュータでもプロセスを持つことができるので、スレッドよりもオーバーヘッドが大きくなります。 @ReDマルチプロセスで利益を得るためには、各プロセスに「十分な」作業が必要です。さもなければ、 'Threads。@ threads'を使ってスレッドを使うべきです。 –
最初にいくつかの用語を教えていただけますか?これは並列処理ではなく、単なる[並行]スケジューリングと定義されている*(cit:)* - ** [並列処理]は**です。並列処理で実行されるすべてのスレッドレベルおよび/または命令レベルのタスクを開始/実行/終了することが保証され、同時に実行されるコードパスの保証された仕上がりを提供する** [並行処理] **このような[並列]実行を可能にするためには、200E + 6個のCPUコアが必要です。ここではなく、** @パラレル**デコレータはCPUを作成しません – user3666197