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 要素の計算を並列化する正しい方法ですか?