コンテキスト:私は自分のエンジン(この時点では4つのエンジン)に散在している配列を持っていて、配列の各ポイントに任意の反復回数の関数を適用したい結果の配列をエンジンから集めて分析を実行します。例えばスキャッタ/ギャザーを使用したIpyparallel低速実行
Iが散在しているデータ点のアレイと、各データポイントに反復数を有する:
data_points = range(16)
iterations = 10
dview.scatter('points', data_points)
Iがエンジンにプッシュされ、例えば、ユーザ提供の関数を有します。
def user_supplied_function(point):
return randint(0, point)
dview.push(dict(function_one = user_supplied_function))
私の結果と並列実行のためのリスト:
result_list = []
for i in range(iterations):
%px engine_result = [function_one(j) for j in points]
result_list.append(dview.gather('engine_result'))
Issue:これはうまくいき、エンジンから必要な結果を得ることができますが、反復回数が増えるにつれてループの実行には時間がかかります。 50ポイントの1000回の反復が完了するまでに15秒以上かかるポイントまで。このタスクのシーケンシャルバージョンは1秒未満しかかかりません。
これを引き起こす原因は何ですか? gather()
から渡されるメッセージのオーバーヘッドになるのでしょうか?もしそうなら誰もどんな解決策を提案することができますか?