示例#1
0
 public static void CompareExchangeMin <T>(this ConcurrentNodeDictionary <T> map, NodeId node, T comparand) where T : IComparable <T>
 {
     if (comparand.IsLessThan(map[node]))
     {
         map[node] = comparand;
     }
 }
示例#2
0
        public ConcurrentNodeDictionary <ulong> ComputeAggregateCosts(ConcurrentNodeDictionary <ulong> durations)
        {
            ConcurrentNodeDictionary <ulong> aggregateCosts = new ConcurrentNodeDictionary <ulong>(true);

            List <NodeId> sortedNodes = new List <NodeId>();

            sortedNodes.AddRange(DataflowGraph.Nodes);
            sortedNodes.Sort((n1, n2) => - DataflowGraph.GetNodeHeight(n1).CompareTo(DataflowGraph.GetNodeHeight(n2)));
            foreach (var node in sortedNodes)
            {
                // int maxConeConcurrency = 0;
                ulong  aggregateCost = 0;
                NodeId maxChild      = NodeId.Invalid;
                foreach (var outgoing in DataflowGraph.GetOutgoingEdges(node))
                {
                    if (aggregateCosts[outgoing.OtherNode].Max(ref aggregateCost) || !maxChild.IsValid)
                    {
                        maxChild = outgoing.OtherNode;
                    }
                }

                aggregateCost       += durations[node];
                aggregateCosts[node] = aggregateCost;
            }

            return(aggregateCosts);
        }
示例#3
0
        public ConcurrentNodeDictionary <ulong> GetAdjustedDurations(ulong threshold)
        {
            ConcurrentNodeDictionary <ulong> durations = new ConcurrentNodeDictionary <ulong>(true);

            foreach (var node in ExecutionData.DataflowGraph.Nodes)
            {
                if (EndTimes[node] > threshold)
                {
                    // TODO: find out what this means!
                    // Debugger.Launch();
                }

                durations[node] = ExecutionData.Durations[node] + Math.Max(0, EndTimes[node] - threshold);
            }

            return(durations);
        }
示例#4
0
 public SimulationResult(PipExecutionData executionData, ConcurrentNodeDictionary <ulong> priorities)
 {
     ExecutionData = executionData;
     Priorities    = priorities;
 }
示例#5
0
 public static T GetOrDefault <T>(this ConcurrentNodeDictionary <T> d, NodeId node)
 {
     if (!node.IsValid)
     {
         return(default);