2016-10-14 7 views
2

Я изучаю, как использовать суперкомпьютеры для эффективного использования ресурсов. Предположим, у меня есть скрипт python, который создаст текстовый файл с заданным случайным числом.Суперкомпьютер: мертвый простой пример программы для запуска в суперкомпьютере

myfile.py

# Imports 
import random,os 

outdir = 'outputs' 
if not os.path.exists(outdir): 
    os.makedirs(outdir) 

with open (outdir+'/temp.txt','w') as f : 
    a = random.randint(0,9) 
    f.write(str(a)) 

Это создаст только один текстовый файл в локальной машине.
Можно ли использовать несколько экземпляров этой программы, использовать несколько узлов и получить несколько выходов?

У меня есть шаблон для mpiexec в программе на C, который выглядит так, но я не смог найти шаблон для программы python.

#PBS -N my_job 
#PBS -l walltime=0:10:00 
#PBS -l nodes=4:ppn=12 
#PBS -j oe 

cd $PBS_O_WORKDIR 

mpicc -O2 mpi-hello.c -o mpi-hello 

cp $PBS_O_WORKDIR/* $PFSDIR 
cd $PFSDIR 

mpiexec ./mpi-hello 

cp $PFSDIR/* $PBS_O_WORKDIR 

Примечание: На одном узле с использованием нескольких ядер я могу написать Баш скрипт так:

for i in `seq 1 10`; 
    do 
     python myfile.py && cp temp.txt outputs/out$i.txt & 
    done 

Но я хочу использовать разные узлы.
Требуемая мощность: выходы/out1.txt, out2.txt, out3.txt и т.д.

Некоторые родственных соединений являются следующие:
https://www.osc.edu/sites/osc.edu/files/documentation/Batch%20Training%20-%2020150312%20-%20OSC.pdf
https://www.osc.edu/~kmanalo/multithreadedsubmission

ответ

3

Посмотрите на эту ссылку она может решить вашу проблему

http://materials.jeremybejarano.com/MPIwithPython/introMPI.html

так что ваши Код может быть что-то вроде:

from mpi4py import MPI 
import random,os 

outdir = 'outputs' 
comm = MPI.COMM_WORLD 
rank = comm.Get_rank() 

if not os.path.exists(outdir): 
    os.makedirs(outdir) 

with open (outdir+'/temp%s.txt' % rank,'w') as f : 
    a = random.randint(0,9) 
    f.write(str(a)) 

и файл PbS:

#!/bin/bash 
################################################################################ 
#PBS -N myfile.py 
#PBS -l nodes=7:ppn=4 
#PBS -l walltime=30:30:00:00 
#PBS -m bea 
##PBS -M [email protected] 
############################################################################### 

cores=$(awk 'END {print NR}' $PBS_NODEFILE) 
mpirun -np $cores python myfile.py 
+0

Спасибо очень очень много для вашего ответа. Я проведу этот код в супер-вычислительном центре штата Огайо. –

+0

Будет ли он также копировать разные выходы в конечном выходе, может быть, ему нужно - pbsdcp, но я не знаю, как это сделать? –

+0

@BhishanPoudel, я не понимаю ваш вопрос – efirvida