Оптимальное количество потоков для параллельного GNU - PullRequest
1 голос
/ 05 мая 2020

Думаю, у меня есть довольно простой c вопрос. Я только что открыл для себя параллельный пакет GNU и думаю, что мой рабочий процесс действительно выиграет от этого! Я использую al oop, который просматривает мои файлы чтения и генерирует желаемый результат. Команда, которая выполняется при каждом чтении, выглядит примерно так:

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

Как вы можете видеть, я указал 8 потоков, то есть количество потоков, которое имеет моя виртуальная машина.

У меня следующий вопрос: если я использую GNU parallel с такой командой:

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

Может ли моя виртуальная машина обрабатывать указанное мной количество потоков, если Выполняю 3 работы параллельно?

Или мне нужно 24 потока (3 * 8 потоков), чтобы правильно выполнить эту команду?

Извините, если это основной c вопрос, я очень новичок в этой области и приветствуется любая помощь!

1 Ответ

0 голосов
/ 07 мая 2020

Лучший совет - просто: попробуйте разные значения и измерения.

При распараллеливании есть ооочень много факторов, которые могут повлиять на результаты: дисковый ввод-вывод, общий кэш ЦП и общая пропускная способность ОЗУ, просто чтобы назвать 3.

top ваш друг при измерении. Если вам удастся заставить все ЦП работать на <5% простоя, вы вряд ли сможете go быстрее - независимо от того, что вы делаете. </p>

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%. Если ваши процессы используют нагрузку на ЦП, то здесь может помочь запуск дополнительных процессов параллельно. Если они используют много дискового ввода-вывода, это может помочь, а может и не помочь. Единственный способ узнать это - проверить и измерить.

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%. Запуск большего количества процессов вряд ли сделает вещи go быстрее.

Поэтому увеличивайте распараллеливание до тех пор, пока время простоя не достигнет минимума или пока среднее время обработки не достигнет минимума (--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 минут. Ваша командная строка полюбит вас за это.

...