Pergunta

Tenho acesso a um cluster de 128 núcleos no qual gostaria de executar um trabalho paralelo. O cluster usa Sun GridEngine e meu programa é escrito para ser executado usando Python paralelo, Numpy, Scipy no Python 2.5.8. A execução do trabalho em um único nó (4 núcleos) produz uma melhoria de ~ 3,5x em relação a um único núcleo. Agora, gostaria de levar isso para o próximo nível e dividir o trabalho em ~ 4 nós. Meu qsub O script parece algo assim:

#!/bin/bash
# The name of the job, can be whatever makes sense to you
#$ -N jobname

# The job should be placed into the queue 'all.q'.
#$ -q all.q

# Redirect output stream to this file.
#$ -o jobname_output.dat

# Redirect error stream to this file.

#$ -e jobname_error.dat

# The batchsystem should use the current directory as working directory.
# Both files will be placed in the current
# directory. The batchsystem assumes to find the executable in this directory.
#$ -cwd

# request Bourne shell as shell for job.
#$ -S /bin/sh

# print date and time
date

# spython is the server's version of Python 2.5. Using python instead of spython causes the program to run in python 2.3
spython programname.py

# print date and time again
date

Alguém tem alguma idéia de como fazer isso?

Foi útil?

Solução

Sim, você precisa incluir a opção de mecanismo de grade -np 16 em seu script como este:

# Use 16 processors
#$ -np 16

ou na linha de comando quando você enviar o script. Ou, para acordos mais permanentes, use um .sge_request Arquivo.

Em todas as instalações da GE que já usei, isso dará a você 16 processadores (ou núcleos de processador hoje em dia) em mínimos nós, conforme necessário; portanto, se seus nós tiverem 4 núcleos, você receberá 4 nós, se eles tiverem 8 2 e em breve. Para colocar o trabalho, digamos 2 núcleos em 8 nós (o que você pode querer fazer se precisar de muita memória para cada processo) é um pouco mais complicado e você deve consultar sua equipe de suporte.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top