在python中运行的多进程命令的最佳资源分配

2024-07-04 13:44:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我开发了一个工具,要求用户提供运行它所需的CPU数量。你知道吗

作为程序的一部分,该工具调用HMMER(HMMER-http://eddylab.org/software/hmmer3/3.1b2/Userguide.pdf),它本身非常慢,需要多个cpu才能运行。你知道吗

考虑到用户指定了多少个cpu,我对如何最有效地分配cpu感到困惑。你知道吗

例如,假设用户提供了Ncpu,我就可以运行

  • NHMMER作业,每个作业有一个CPU

  • N/2作业,每个作业有2个CPU

等等。。你知道吗

我目前的解决方案是任意打开大小为N/5的池并打开一个池,然后在池中的每个进程中使用5个CPU调用HMMER:

pool = multiprocessing.Pool(processes = N/5)

pool.map_async(run_scan,tuple(jobs))

pool.close()

pool.join()

其中run_scan调用HMMER,jobs将每个HMMER作业的所有命令行参数作为字典保存。你知道吗

这个程序非常慢,我想知道是否有更好的方法来做到这一点。你知道吗

谢谢


Tags: 工具run用户org程序http数量scan
1条回答
网友
1楼 · 发布于 2024-07-04 13:44:58

几乎所有的情况下,并行化在效率上都要付出一定的代价,但是代价很大程度上取决于计算的细节,所以我认为回答这个问题的唯一方法是一系列的实验。你知道吗

(我假设内存或磁盘I/O在这里不是问题;对HMMER不太了解,但《用户指南》在“需求”部分根本没有提到内存。)

  • 在一个核( cpu 1)上运行相同的作业,然后运行两个核,四个,六个,…,看看需要多长时间。这会让你了解这些工作并行化的程度。已用CPU时间=运行时*内核数应保持不变。你知道吗
  • 一旦您注意到运行时和用于该作业的内核数之间存在低于线性的相关性,就开始并行运行多个作业。假设您有24个核,一个作业在单个核上需要240秒,在两个核上需要118秒,在三个核上需要81秒,在四个核上需要62秒,但是在五个核上需要59秒(而不是预期的48秒),您应该并行运行6个作业,每个作业有4个核。你知道吗
  • 您可能会看到在大约n\u cores/2处的数量急剧下降:一些计算在Hyperthreading上不能很好地工作,而且核心的数量实际上是CPU制造商声称的数量的一半。你知道吗

相关问题 更多 >

    热门问题