多处理在PBS中的多个CPU(每个具有多个内核)上分配多个作业

时间:2020-06-09 01:43:04

标签: python multiprocessing pbs

工作是在网格(16 x 16)上计数10。共享的dict 正在监视。代码在这里:

import json
import multiprocessing as mp
import time
from itertools import product


def func(point, limit, pause, Library):
    while True:
        if Library[point] >= limit:
            break
        time.sleep(pause)
        Library[point] += pause
        pass
    pass


def main():
    limit = 10
    pause = 1
    points = list(product(range(16), range(16)))
    Library = mp.Manager().dict()
    Library.update({point: 0 for point in points })
    pool = mp.Pool()
    t0 = time.time()
    for point in points:
        pool.apply_async(func, args=[point, limit, pause, Library])
        pass
    pool.close()
    pool.join()
    duration = round(time.time()-t0, 2)
    print(duration)
    pass


if __name__ == '__main__':
    main()
    pass

我在具有多个节点的服务器上运行它。每个节点有多个(≥16)CPU,每个CPU有16个内核。我假设如果该脚本tasks.py在16个CPU上运行,那么将为每个内核分配一个进程。因此,运行时间应该在10秒左右。 PBS文件是这样的:

#!/bin/sh
#PBS -N tasks
#PBS -l select=1:ncpus=16
#PBS -l partition=std
#PBS -l walltime=1:00:00
#PBS -o logs/output/tasks.o
#PBS -e logs/error/tasks.e

cd $PBS_O_WORKDIR

python tasks.py

但是我错了。运行时间为160.72秒。似乎只有一个CPU在工作。有没有一种方法可以在PBS中的多个CPU上运行多处理脚本?任何帮助表示赞赏。谢谢。

0 个答案:

没有答案