1

我有以下代码

import multiprocessing as mp
import os

def funct(name):
    if nameisvalid:
        do_some_stuff_and_save_a_file
        return 1
    else:
        return 0

num_proc = 20 #or a call to slurm/mp for number of processors
pool = mp.Pool(processes=num_proc)
results = pool.map_async(makeminofname, [n for n in nameindex])
pool.close()
pool.join()

我已经在带有 6 核处理器的桌面上运行了num_proc=mp.cpu_count()它,它运行良好且快速,但是当我尝试在我们的处理集群上的 sbatch 脚本中运行这个脚本时,使用-N 1 -n 20(我们的节点每个都有24 个处理器)或任意数量的处理器,它运行速度非常慢,而且似乎只使用 10-15 个处理器。有什么方法可以优化多处理以使用 slurm?

4

1 回答 1

1

funct检查磁盘中的特定文件,然后加载文件,然后工作,然后保存文件。这导致我的各个进程正在等待输入/输出操作而不是工作。因此,我在将所有初始数据传递到池之前加载了所有初始数据,并添加了一个Processfrom multiprocessingdedicated to save files from a Queue,池化进程将其输出放入其中,因此只有一个进程试图保存。

于 2015-11-25T01:55:51.930 回答