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

如果我并行执行 3 个作业,我的虚拟机能否处理我指定的线程数?

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

如果这是一个基本问题,我很抱歉,我对这个领域很陌生,非常感谢任何帮助!

4

1 回答 1

1

最好的建议很简单:尝试不同的值和衡量标准。

在并行化中,有很多因素会影响结果:磁盘 I/O、共享 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,那么在这里并行启动更多进程可能会有所帮助。如果他们使用大量的磁盘 I/O,它可能有帮助,也可能没有帮助。唯一知道的方法是测试和测量。

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.com/shop/ole-tange/gnu-parallel-2018/paperback/product-23558902.html下载:https ://doi.org/10.5281/zenodo .1146014 ) 至少阅读第 1+2 章。它应该花费您不到 20 分钟的时间。您的命令行会因此而爱上您。

于 2020-05-06T23:45:22.737 回答