2

IPython Parallel のドキュメントを読むと、バッファがコア間でコピーされることがわかります。ただし、使用するtrack = Trueことで、バッファーをその場で編集できると書かれています。

次の例は、次の場合でも機能しませんtrack = True

import numpy as np
from IPython.parallel import Client

A = np.zeros((10,10), int)

rc = Client()
dview = rc[:]

def ptest(a):
    a[0] = 5

dview.track = True
r = dview.map_sync(ptest, A)
r.wait_for_send()

a書き込み可能ではないというエラーが表示され続けます(割り当て先は読み取り専用です)。

私が直面している問題は、非常に大きな 3D マトリックスがあり、その場で変更したいということです。私のアイデアは、 のmapようなアプローチを使用して、個々の 2D スライスをクラスターに送信し、その場で変更することでした。

IPython Parallel でこれを達成する方法はありますか? それとも、書き込み可能なバッファを送信することは事実上不可能で、唯一の方法はコピーされたバッファから結果を収集することですか?

これが不可能な場合、IPython Notebook で非同期にコアから結果を取得し、コールバック関数で更新する方法はありますか? これは、問題ないものの疑似コードです。IPython Parallel で利用できるこのようなものはありますか?:

def edit(a):
    a[0] = 5
    return a

def callback(i, a):
    A[i] = a

r = dview.map_async(edit, A, callback)
r.wait()

上記のコードのアイデアは、(現在のマシンの) 出力バッファーのrowsを非同期に更新するコールバックと並行して、マトリックスから変更された値を返す関数を用意することです。rows

つまり、マルチプロセッシングの代わりに IPython Parallel を使用すると、このようなものが機能します。

4

0 に答える 0