Changeset 5639

Show
Ignore:
Timestamp:
10/30/09 17:56:01 (3 weeks ago)
Author:
goodell
Message:

Fix mpd process_mapping in another case (ticket #905).

This is yet another band-aid on mpd's process mapping support. The
right fix is probably just to use hydra and remove this functionality
from mpd.

Reviewed by balaji@.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • mpich2/trunk/src/pm/mpd/mpd.py

    r5071 r5639  
    865865        # 1. block regular 
    866866        # 2. round-robin regular 
    867         # we do handle a "remainder node" that might not be full 
     867        # we do handle "remainder nodes" that might not be full 
    868868        delta = -1 
    869869        max_ranks_per_node = 0 
     
    888888                        return '' 
    889889                last_rank = rank 
     890 
     891        # another check (case caught in ticket #905) for layouts like {0:A,1:A,2:B,3:B,4:B} 
     892        if len(node_to_ranks.keys()) > 1: 
     893            first_size = len(node_to_ranks[0]) 
     894            last_size  = len(node_to_ranks[len(node_to_ranks.keys())-1]) 
     895            if (last_size > first_size): 
     896                mpd_print(1, "irregular case C1 detected") 
     897                return '' 
     898            in_remainder = False 
     899            node_ids = node_to_ranks.keys() 
     900            node_ids.sort() 
     901            for node_id in node_ids: 
     902                node_size = len(node_to_ranks[node_id]) 
     903                if not in_remainder: 
     904                    if node_size == first_size: 
     905                        pass # OK 
     906                    elif node_size == last_size: 
     907                        in_remainder = True 
     908                    else: 
     909                        mpd_print(1, "irregular case C2 detected") 
     910                        return '' 
     911                else: # in_remainder 
     912                    if node_size != last_size: 
     913                        mpd_print(1, "irregular case C3 detected") 
     914                        return '' 
    890915 
    891916        num_nodes = len(node_to_ranks.keys())