2016-11-09 10 views
1

У меня есть небольшой тестовый код, который действует как ферма задач, при этом главный процесс отправляет задачи на подчиненные устройства.Получить мастер для работы в ферме задач

Мне было интересно, есть ли простой способ заставить хозяина взять свою долю работы из списка задач. Например, используя отправку и получение от мастера к себе, но я не уверен, что это завершится чисто.

Код выглядит следующим образом:

###!/usr/bin/env python 
from mpi4py import MPI 
import numpy 
import sys 
import os 
import time 




comm=MPI.COMM_WORLD 
rank=comm.Get_rank() 
size = comm.Get_size() 
#print(rank,size) 


if rank == 0: 
    tasks=([StopIteration] * (size-1))+[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] 
    status=MPI.Status() 

    while tasks: 
     comm.recv(source=MPI.ANY_SOURCE, status=status) 
     data=tasks.pop() 
     print("master sending data ",data," to rank", status.Get_source()) 
     comm.send(obj=data, dest=status.Get_source()) 
     print("master: done send. Data left: ",tasks) 

else: 
    print("slave", rank," entering loop") 
    for task in iter(lambda: comm.sendrecv(dest=0), StopIteration): 
     print("slave ", rank," recvd data", task) 
     print("slave ", rank," going to sleep") 
     time.sleep((task+0.5)*2*1.4) 

Любые яркие предложения приветствуются!

Благодаря

+1

Это или требует отдельного потока в ведущем или очень сложной логики, которая объединяет вычисления с неблокирующий обмен сообщениями. Самое простое решение - просто запустить еще один процесс MPI и дать указание среде выполнения MPI разместить этот процесс на том же хосте, что и основной ранг. –

ответ

 Смежные вопросы

  • Нет связанных вопросов^_^