This only affects Vertex where get_fixed_key_and_mask returns something other than Non
There is a clash between completely flexible fixed keys and masks and how keys and masks are used.
The suggestion is to limit and check what are allowed fix keys and masks.
For ease of reading
- AppVertex is use when it is actually the pair of an AppliactionVertex and a ParttionID
- MachineVertex is used when it is actually the result of splitter.get_out_going_vertices
- Unless specified as graph wide all Machine is just for a single AppVertex
- AppMask is the result of get_fixed_key_and_mask(partition_id)
- MachineMask is the result of get_machine_fixed_key_and_mask
- MachineIndex is the result of MachineVertex.index
The rules include
- If an AppVertex has 1 MachineVertex
- machineMask may be None
- Then the MachineIndex must be zero
- If AppVertex has more than one MachineVertex
- Each must have the same MachineMask
- All masks must have one bits at the top followed by zero bits below
- The MachineMasks must not have less 1 bits than the corresponding AppMask
- All MachineMasks must have at least the 8 bottom bits as zero
- Ideally All Fixed MachineMasks will be the same script wide
- The ApplicationKey should only have one bits near the top
- ideally only using the top 8 bits or fewer
- There may be zero bits between the one bits
- If there is only 1 fixed AppVertex a key of 0 is ideal
- The bits zero in the AppMask but not the MachineMask should be the MachineIndex
- Ideally MachineKey - ApplicationKey == MachineVertex.index
- If the AppVertex has only one Machine Vertex and MachineKey and MachineIdnex of 0 are ideal
Examples
This only affects Vertex where get_fixed_key_and_mask returns something other than Non
There is a clash between completely flexible fixed keys and masks and how keys and masks are used.
The suggestion is to limit and check what are allowed fix keys and masks.
For ease of reading
The rules include
Examples
Only fixed One to One
fixed One to One
Only Fixed with 3 machine
Fixed with 3 machine