Python joblib 在 n_jobs 大于 8 后几乎没有性能增益

1次阅读

共计 1199 个字符,预计需要花费 3 分钟才能阅读完成。

电脑 CPU 为 AMD Ryzen 7 6800H,8 核 16 进程

系统为 Windows 11

任务为对一组数据做分段 FFT,因为每段 FFT 相互无关,所以将整段数据分为 n_jobs 块后每块并行计算,试图加速(具体代码不能公开,正在整理一份能复现的代码)。但是发现了奇怪的情况,保持其他参数不变,使用 parallel = Parallel(n_jobs=int(n_jobs)),当 n_jobs 大于 4 后,总体用时不会下降。

Python joblib 在 n_jobs 大于 8 后几乎没有性能增益

深入进程测试后发现每个进程内部的 for 循环内的代码拖慢了速度,代码如下(正常来说怎么测试每行代码的性能呢……望大佬指路!):

tCost = []

for i in batchTask:
    tCost.append([time.time()])

    startTime = sampleDot[0] + i * step
    endTime = startTime + step

    splitSampleDot = sampleDot[np.where((sampleDot>= startTime) & (sampleDot < endTime))
    ]

    tCost[-1].append(time.time() - tCost[-1][0]) # ckpt t0

    splitData = np.array(list(zip(splitSampleDot, linearData(splitSampleDot))))

    tCost[-1].append(time.time() - tCost[-1][0]) # ckpt t1
    
    signal, powerDensity = getFftResult(
        splitData,
        splitSampleDot,
        float(sampleRate),
        0.0,
        0.8,
        float(minFreq),
    )

    tCost[-1].append(time.time() - tCost[-1][0]) # ckpt t2

    powerDensity[powerDensity < displayThreshold] = np.nan

    tCost[-1].append(time.time() - tCost[-1][0]) # ckpt t3

    fftDataList.append(powerDensity)
    fftFreqList.append(signal)

    fftStartTimeList.append(datetime.fromtimestamp(startTime))

    tCost[-1].append(time.time() - tCost[-1][0]) # ckpt t4

    realTimeDateObjList.append(mdates.date2num(np.vectorize(datetime.fromtimestamp)(splitSampleDot))
    )

    tCost[-1].append(time.time() - tCost[-1][0]) # ckpt t5

请问为什么会出现这种情况呢?有哪些办法能进一步提升性能呢?

正文完
 0