【问题标题】:Performance of joblib Parallel loop with numpy ndarray使用 numpy ndarray 的 joblib 并行循环的性能
【发布时间】:2023-04-02 09:10:01
【问题描述】:

我正在使用 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 元素的正确方法吗?

【问题讨论】:

  • Numpy 比循环快。也许您可以修改 calcRAD 方法以直接在 numpy 数组上工作。
  • 我对@9​​87654324@ 了解不多,但如果RADMat 不是并行循环末尾的零数组,我会感到惊讶(不仅速度较慢,但它也可能不正确;)。
  • 是的,确实有一个错误。它是在重写并行化期间提交的。感谢您的提示。我想我应该使用 numpy 数组而不是嵌套的 for 循环。感谢您的评论@eumiro。
  • @tisch 如果此问题不再有效,您应该将其标记为已关闭。

标签: python numpy parallel-processing


【解决方案1】:

您可以在并行任务中包含两个 for 循环,如下所示:

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) )

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

....
....

如果您在循环中调用 Parallel 任务,正如您所做的那样,您的计算是次优的。

希望对您有所帮助!

最好的问候,

【讨论】:

    猜你喜欢
    • 2016-09-29
    • 2021-07-24
    • 2020-08-18
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    • 1970-01-01
    • 2018-10-10
    • 2021-12-04
    相关资源
    最近更新 更多