我想我有一个相当基本的问题。我刚刚发现了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线程)才能正确执行这个命令?
如果这是一个基本的问题,我很抱歉,我是这个领域的新手,任何帮助都非常感激!我想我有一个相当基本的问题。
最好的建议很简单。试试不同的值和测量。
在并行化中,有太多的因素会影响结果。磁盘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分钟的时间。你的命令行会因此爱上你。