GNU并行的最佳线程数

问题描述 投票:0回答:1

我想我有一个相当基本的问题。我刚刚发现了GNU并行包,我认为我的工作流程真的可以从它那里受益!我正在使用一个循环,它循环通过我的读取文件并生成所需的输出。为每个读取执行的命令看起来像这样。

STAR --runThreadN 8 --genomeDir star_index/ --readFilesIn R1.fq R2.fq

正如你所看到的,我指定了8个线程,这是虚拟机的线程数量。

我现在的问题是这样的:如果我使用GNU并行与这样的命令。

cat reads| parallel -j 3 STAR --runThreadN 8 --genomeDir star_index/ --readFilesIn {}_R1.fq {}_R2.fq

如果我使用GNU并行命令这样做: 如果我并行执行3个作业,我的虚拟机能处理我指定的线程数吗?

还是我需要24个线程(3*8线程)才能正确执行这个命令?

如果这是一个基本的问题,我很抱歉,我是这个领域的新手,任何帮助都非常感激!我想我有一个相当基本的问题。

multithreading parallel-processing jobs gnu-parallel rna-seq
1个回答
0
投票

最好的建议很简单。试试不同的值和测量。

在并行化中,有太多的因素会影响结果。磁盘IO,共享CPU缓存,共享RAM带宽,这只是三个例子。

top 是你测量时的朋友。如果你能设法让所有的CPU都有<5%的空闲,你不可能走得更快--无论你做什么。

top - 14:49:10 up 10 days,  5:48, 123 users,  load average: 2.40, 1.72, 1.67
Tasks: 751 total,   3 running, 616 sleeping,   8 stopped,   4 zombie
%Cpu(s): 17.3 us,  6.2 sy,  0.0 ni, 76.2 id,  0.3 wa,  0.0 hi,  0.0 si,  0.0 st
GiB Mem :   31.239 total,    1.441 free,   21.717 used,    8.081 buff/cache
GiB Swap:  117.233 total,  104.146 free,   13.088 used.    4.706 avail Mem 

这台机器的空闲率是76.2%。如果你的进程使用了大量的CPU,那么在这里启动更多的并行进程可能会有帮助。如果它们使用了大量的磁盘IO,那可能会有帮助,也可能没有。只有通过测试和测量才能知道。

top - 14:51:00 up 10 days,  5:50, 124 users,  load average: 3.41, 2.04, 1.78
Tasks: 759 total,   8 running, 619 sleeping,   8 stopped,   4 zombie
%Cpu(s): 92.8 us,  6.9 sy,  0.0 ni,  0.1 id,  0.0 wa,  0.0 hi,  0.2 si,  0.0 st
GiB Mem :   31.239 total,    1.383 free,   21.772 used,    8.083 buff/cache
GiB Swap:  117.233 total,  104.146 free,   13.087 used.    4.649 avail Mem 

这台机器的空闲率是0.1%。启动更多的进程不太可能让事情变得更快。

所以增加并行化,直到空闲时间达到最小值,或者直到平均处理时间达到最小值(--joblog my.log 可以用来查看一项工作需要多长时间)。)

是的:GNU Parallel很可能会加快生物信息学的发展速度(由一位生物信息学同行编写)。

考虑阅读GNU Parallel 2018(论文。http:/www.lulu.comshopole-tangegnu-parallel-2018paperbackproduct-23558902.html 下载。https:/doi.org10.5281zenodo.1146014) 至少阅读1+2章。它应该花你不到20分钟的时间。你的命令行会因此爱上你。

© www.soinside.com 2019 - 2024. All rights reserved.