1

numpy を使用して Python で統計計算を行っています。私の現在の実装は、これまでのところ並列化されていません。そこで、単純なループ並列化のために python joblib Parallel を調べていました。

コードの並列化されていない部分は次のようになります。

def calcRADMatInt( i, j , RADMat, pdfMu, pdfSigma):
  if i==j:
    RADMat[i, j] = 0.0
  else:
    RADMat[i, j] = calcRAD( pdfMu[i], np.squeeze( pdfSigma[i]), pdfMu[j], np.squeeze( pdfSigma[j]) )
    RADMat[j, i] = RADMat[i,j]

def caldRADMat(....):

....
....
  RADMat = np.zeros( (numLandmark, numLandmark) )

  for i in range( 0, numLandmark):
    for j in range( i, numLandmark)):
      calcRADMatInt( i, j, RADMat, pdfMu, pdfSigma)

....
....

私はこのようにそれを並列化しようとしました:

def caldRADMat(....):
....
....

  RADMat = np.zeros( (numLandmark, numLandmark) )

  for i in range( 0, numLandmark):
    Parallel(n_jobs=8)(delayed(calcRADMatInt)( i, j, RADMat, pdfMu, pdfSigma) for j in    range( i, numLandmark))

....
....

ただし、結果の並列コードは、並列化されていないバージョンよりも大幅に遅くなります。

したがって、私の実際の質問は次のとおりだと思います。joblib Parallel を正しく使用していますか? これは、numpy ndarray 要素の計算を並列化する正しい方法ですか?

4

1 に答える 1