Я сталкиваюсь с этой любопытной проблемой.Я не думаю, что ответ сложный, но я нигде не могу его найти, поэтому полагаюсь на ваши предложения.
Предположим, у меня есть параллельная функция python внутри файла parallel_func.py
:
def parallel_func():
parser=OptionParser()
parser.add_option("-f", "--file", dest="filename",
help="Input FILE", metavar="FILE")
parser.add_option("--parallel", action="store_true",
help="Specify if we need to initialize MPI",
dest="with_MPI", default=False)
(options, args)=parser.parse_args()
if options.with_MPI == True:
from mpi4py import MPI
comm = MPI.COMM_WORLD
myid = comm.Get_rank()
numberPart = comm.Get_size()
have_MPI = True
else:
comm = 0
myid = 0
numberPart = 1
have_MPI = False
etc. etc.
Я могу вызвать эту функцию из оболочки, просто набрав:
mpirun -np XX parallel_func.py -f input_file --parallel
Теперь, есть ли способ вызвать мой parallel_func как функцию внутри скрипта Python, которая не параллельна и работает в одноядерном процессоре?Моя текущая версия работает, но запускаю parallel_func в одноядерном:
from parallel_func.py import parallel_func
# -------------------------------------------------------------------
# Main
# -------------------------------------------------------------------
def main():
parser=OptionParser()
parser.add_option("-f", "--file", dest="filename",
help="Input FILE", metavar="FILE")
parser.add_option("-n", "--partitions", dest="partitions",
default=1,
help="number of PARTITIONS",
metavar="PARTITIONS")
(options, args)=parser.parse_args()
options.partitions = int( options.partitions )
if options.partitions > 1:
options.with_MPI = True
else:
options.with_MPI = False
parallel_func(options)
Короче говоря, есть ли способ передать в функции python main
всю информацию, необходимую для MPI.COMM_WORLD
, чтобы сделать parallel_func
правильно работает?
Заранее спасибо за ответ !!