internal int[] MergeDataFromWorkers() { if (IsGlobalManager) { QSArray result = null; for (int process = 0; process < globalGroup.Total; process++) { var array = ReceiveGlobalArrayFrom(process, Tags.Collect); if (result == null) { result = array; } else { result = QSArray.Merge(result, array); } } return(result.GetContent()); } else { throw new InvalidOperationException($"Not Global Manager"); } }
internal void PartitionAndPartsExchange() { currentArray.Partition(currentPivot, out QSArray low, out QSArray high); int partner = group.IsLeftHalf ? group.Current + group.Total / 2 : group.Current - group.Total / 2; if (group.IsLeftHalf) { group.Communicator.ImmediateSend <int[]>(high.GetContent(), partner, Tags.Exchange); high = ReceiveArrayFrom(partner, Tags.Exchange); } else { group.Communicator.ImmediateSend <int[]>(low.GetContent(), partner, Tags.Exchange); low = ReceiveArrayFrom(partner, Tags.Exchange); } currentArray = QSArray.Merge(low, high); }