附加的脚本针对不同大小的矩阵上不同数量的并行进程评估 numpy.conjugate 例程,并记录相应的运行时间。矩阵形状仅在第一维上有所不同(从 1,64,64 到 256,64,64)。共轭调用始终在 1,64,64 个子矩阵上进行,以确保正在处理的部分适合我系统上的 L2 缓存(每个核心 256 KB,在我的情况下 L3 缓存为 25MB)。运行脚本会生成下图(轴标签和颜色略有不同)。
正如您所看到的,从大约 100,64,64 的形状开始,运行时间取决于所使用的并行进程的数量。
这可能是什么原因造成的?
或者为什么 (100,64,64) 以下的矩阵对进程数的依赖性如此之低?
我的主要目标是找到对此脚本的修改,以便运行时尽可能独立于任意大小的矩阵“a”的进程数量。
如果有 20 个进程:
所有“a”矩阵最多占用:20 * 16 * 256 * 64 * 64 字节 = 320MB
所有“b”子矩阵最多占用:20 * 16 * 1 * 64 * 64 字节 = 1.25MB
因此,所有子矩阵同时适合 L3 缓存,并且单独适合 CPU 每个核心的 L2 缓存。我在这些测试中只使用了物理核心,没有使用超线程。
这是脚本:
from multiprocessing import Process, Queue
import time
import numpy as np
import os
from matplotlib import pyplot as plt
os.environ['OPENBLAS_NUM_THREADS'] = '1' …Run Code Online (Sandbox Code Playgroud) python numpy multiprocessing cpu-cache python-multiprocessing