Определить количество процессоров, назначенных на работу - PullRequest
2 голосов
/ 23 мая 2019

Я пытаюсь исправить программу на python, которая будет использовать пул рабочих для выполнения задач в вычислительной среде Linux hpc. Я хочу установить количество работников в пуле равным количеству потоков, которые я запросил для моей работы.

Такие команды, как multiprocessing.cup_count() и num_procs, возвращают 64, то есть количество потоков на узле, но не количество потоков, назначенных моей работе.

Мое текущее решение состоит в том, чтобы выполнить команду grep в командном файле для определения количества потоков, а затем проверить вывод:

os.system('grep -i "batch -n" * > output')

file_ = open('output','r')
file_lines = file_.readlines()
file_.close()

for line in file_lines:
  elems = line.strip().split()
  if '-n' in elems:
    position = elems.index('-n')
    num_procs = elems[position+1]

Есть ли более лаконичный и прямой способ сделать это?

1 Ответ

0 голосов
/ 18 июня 2019

В зависимости от используемого вами планировщика, вы можете запросить количество ядер, запрошенных вашей работой у планировщика. Для SGE - $NSLOTS; для SLURM - $SLURM_CPUS_PER_TASK; для PBS - $PBS_NP.

Например, для SGE:

import os
#for SGE:
nslots = int(os.environ['NSLOTS']))

# for SLURM:
nslots = int(os.environ['SLURM_CPUS_PER_TASK']))
...