我开发了一个工具,要求用户提供运行它所需的CPU数量。你知道吗
作为程序的一部分,该工具调用HMMER(HMMER-http://eddylab.org/software/hmmer3/3.1b2/Userguide.pdf),它本身非常慢,需要多个cpu才能运行。你知道吗
考虑到用户指定了多少个cpu,我对如何最有效地分配cpu感到困惑。你知道吗
例如,假设用户提供了N
cpu,我就可以运行
N
HMMER作业,每个作业有一个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作业的所有命令行参数作为字典保存。你知道吗
这个程序非常慢,我想知道是否有更好的方法来做到这一点。你知道吗
谢谢
几乎所有的情况下,并行化在效率上都要付出一定的代价,但是代价很大程度上取决于计算的细节,所以我认为回答这个问题的唯一方法是一系列的实验。你知道吗
(我假设内存或磁盘I/O在这里不是问题;对HMMER不太了解,但《用户指南》在“需求”部分根本没有提到内存。)
cpu 1
)上运行相同的作业,然后运行两个核,四个,六个,…,看看需要多长时间。这会让你了解这些工作并行化的程度。已用CPU时间=运行时*内核数应保持不变。你知道吗相关问题 更多 >
编程相关推荐