2017-07-20 6 views
0

データ移動(パラレル)

function count_hands(n) 
    c::Int=0 
    for i=1:n 
     c+=rand(Bool) 
    end 
    c 
end 

我々は別のプロセスでabを計算したい ./julia -p 2として、我々はジュリアを実行し、我々が持っている:

julia> @everywhere include("count_hands.jl") 
julia> [email protected] count_hands(1000000000) 
julia> [email protected] count_hands(1000000000) 
julia> fetch(a)+fetch(b) 

1:異なるプロセスでabを計算する方法を確認するにはどうすればよいですか? 私は@spawnの代わりに@spawnatを使用し、プロセスの数を選択することができますが、私はこのコードを見ました。

abについてそれぞれcount_hands(1000000000)が異なるプロセスで計算されており、プロセス1で一緒に追加されています。

答えて

1

異なるプロセスでaとbを計算する方法を確認するにはどうすればよいですか?

あなたはできませんあなたは@spawnat nを使用してnprocs()n以上であること、そしてn sが異なっていることを確認しない限り。

これは正しいですか?

はい、あなたはaのため@spawnat 1を使用しましたことを想定。これをテストするには、次のように関数を書き換えます。

julia> @everywhere function count_hands(n) 
      println("this process is $(myid())") 
      c::Int=0 
      for i=1:n 
       c+=rand(Bool) 
      end 
      c 
     end 

julia> a = @spawnat 1 count_hands(1000) 
this process is 1 
Future(1, 1, 11, Nullable{Any}()) 

julia> b = @spawnat 2 count_hands(1000) 
Future(2, 1, 12, Nullable{Any}()) 

julia> From worker 2: this process is 2 
julia> 

julia> fetch(a) + fetch(b) 
1021