コード例 #1
0
        public void Run()
        {
            SortedDictionary <long, SortedSet <long> > nodeVLevels =
                meapContext.MEAPSharedContext.NodeLevelInfo.NodeVLevels;

            bkwdKStepSequence = CPLTMInfo.BkwdCommsKStepSequence(kStep).ToArray();
            long bkwdKStepLastIndex = bkwdKStepSequence.LastIndex();

            for (long i = (bkwdKStepLastIndex - 1); i >= 0; i--)
            {
                foreach (long uId in nodeVLevels[bkwdKStepSequence[i]])
                {
                    if (!meapContext.TArbSeqCFG.HasNode(uId))
                    {
                        continue;
                    }

                    DAGNode uNode = meapContext.TArbSeqCFG.GetNode(uId);

                    foreach (DAGEdge e in uNode.InEdges)
                    {
                        DAGNode vNode = e.FromNode;
                        long    vId   = vNode.Id;

                        Connect2CommsByCFGEdge(e.Id, uId, vId);
                    }
                }
            }

            foreach (long uId in nodeVLevels[bkwdKStepSequence[bkwdKStepLastIndex]])
            {
                if (!meapContext.TArbSeqCFG.HasNode(uId))
                {
                    continue;
                }

                DAGNode uNode = meapContext.TArbSeqCFG.GetNode(uId);

                foreach (DAGEdge e in uNode.InEdges)
                {
                    DAGNode vNode = e.FromNode;
                    long    vId   = vNode.Id;

                    ConnectCommAndCFGNodeByCFGEdge(e.Id, uId, vId);
                }
            }
        }
コード例 #2
0
        public void Run()
        {
            log.Info("Creating NCG joint nodes");

            long[] kTapeLRSubseq = CPLTMInfo.KTapeLRSubseq().ToArray();

            for (int i = 0; i < (kTapeLRSubseq.Length - 3); i++)
            {
                long kStep     = kTapeLRSubseq[i];
                long kStepNext = kTapeLRSubseq[i + 1];

                FwdBkwdNCommsGraphPair fwdBkwdNCommsGraphPairL = AppHelper.TakeValueByKey(
                    meapContext.muToNestedCommsGraphPair,
                    kStep,
                    () => new FwdBkwdNCommsGraphPair());

                FwdBkwdNCommsGraphPair fwdBkwdNCommsGraphPairR = AppHelper.TakeValueByKey(
                    meapContext.muToNestedCommsGraphPair,
                    kStepNext,
                    () => new FwdBkwdNCommsGraphPair());

                SortedDictionary <long, SortedSet <long> > nodeVLevels =
                    meapContext.MEAPSharedContext.NodeLevelInfo.NodeVLevels;

                long[] bkwdKStepSequence = CPLTMInfo.BkwdCommsKStepSequence(kStep).ToArray();

                SortedDictionary <long, List <long> > bkwdCFGNodeToNCGNodesMap =
                    fwdBkwdNCommsGraphPairL.BkwdCFGNodeToNCGNodesMap;
                SortedDictionary <long, List <long> > fwdCFGNodeToNCGNodesMap =
                    fwdBkwdNCommsGraphPairR.FwdCFGNodeToNCGNodesMap;

                log.InfoFormat($"building ncg nodes for kStep = {kStep}");

                foreach (long level in bkwdKStepSequence)
                {
                    SortedSet <long> cfgNodesAtLevel = nodeVLevels[level];

                    long ncgJointNodeCount     = 0;
                    long inCommodityNodeCount  = 0;
                    long outCommodityNodeCount = 0;

                    foreach (long cfgNodeId in cfgNodesAtLevel)
                    {
                        NCommsGraphJointNode ncgJointNode = AppHelper.TakeValueByKey(
                            meapContext.CfgNodeIdToNCGJointNode,
                            cfgNodeId,
                            () => new NCommsGraphJointNode());

                        if (bkwdCFGNodeToNCGNodesMap.TryGetValue(cfgNodeId, out List <long>?bkwdCfgNodes))
                        {
                            if (fwdCFGNodeToNCGNodesMap.TryGetValue(cfgNodeId, out List <long>?fwdCfgNodes))
                            {
                                ProcessBkwdFwdNodesLists(
                                    fwdBkwdNCommsGraphPairL,
                                    fwdBkwdNCommsGraphPairR,
                                    bkwdCfgNodes,
                                    fwdCfgNodes,
                                    ncgJointNode);

                                ncgJointNodeCount++;
                                inCommodityNodeCount  += ncgJointNode.InCommodityNodes.Count;
                                outCommodityNodeCount += ncgJointNode.OutCommodityNodes.Count;
                            }
                        }
                    }

                    log.InfoFormat($"level: {level}");
                    log.InfoFormat($"ncg jointNodes count at level: {ncgJointNodeCount}");
                    log.InfoFormat($"InCommodityNodes count at level: {inCommodityNodeCount}");
                    log.InfoFormat($"OutCommodityNodes count at level: {outCommodityNodeCount}");
                }
            }

            log.InfoFormat($"ncg jointNodes count: {meapContext.CfgNodeIdToNCGJointNode.Count}");
            log.InfoFormat($"total InCommodityNodes count: {meapContext.CfgNodeIdToNCGJointNode.Sum(t => t.Value.InCommodityNodes.Count)}");
            log.InfoFormat($"total OutCommodityNodes count: {meapContext.CfgNodeIdToNCGJointNode.Sum(t => t.Value.OutCommodityNodes.Count)}");
        }