Esempio n. 1
0
    void Awake()
    {
        if (_instance == null)
        {
            _instance = this;
        }
        else if (_instance != null)
        {
            Destroy(this.gameObject);
        }

        tempEnemies = FindObjectsOfType <Enemy>();

        if (testing)
        {
            percentageChance1 = 0;
            percentageChance2 = 0;
        }
        else
        {
            percentageChance1 = 1 - percentageChance1;
            percentageChance2 = 1 - percentageChance2;
        }

        FilterEnemies();
    }
Esempio n. 2
0
        public void TellMapping(XIL3Instr instr, long cstep, IXILMapping mapping)
        {
            foreach (int rslot in instr.ResultSlots)
            {
                if (!_interlinks.ContainsKey(rslot))
                {
                    _interlinks[rslot] = new Interlink(rslot);
                }
            }

            var sources = instr.OperandSlots.Select(os => _interlinks[os]).ToArray();
            var sinks   = instr.ResultSlots.Select(rs => _interlinks[rs]).ToArray();

            var  verbs   = mapping.Realize(sources, sinks);
            long curStep = cstep;

            foreach (var verb in verbs)
            {
                var pflow = verb.ToCombFlow();
                foreach (var flow in pflow.Flows)
                {
                    var sflow = flow as SignalFlow;
                    if (sflow == null)
                    {
                        continue;
                    }

                    if (sflow.Target.Desc.HasAttribute <int>())
                    {
                        int index = sflow.Target.Desc.QueryAttribute <int>();
                        _interlinks[index].Driver    = sflow.Source.Desc;
                        _interlinks[index].DriveTime = curStep;
                    }
                    else if (sflow.Source.Desc.HasAttribute <int>())
                    {
                        Dictionary <ISignalOrPortDescriptor, int> fanIn;
                        if (!_fanIn.TryGetValue(sflow.Target.Desc, out fanIn))
                        {
                            fanIn = new Dictionary <ISignalOrPortDescriptor, int>();
                            _fanIn[sflow.Target.Desc] = fanIn;
                        }

                        int index  = sflow.Source.Desc.QueryAttribute <int>();
                        var driver = _interlinks[index].Driver;
                        if (driver == null)
                        {
                            continue;
                        }
                        int slack = (int)(curStep - _interlinks[index].DriveTime);
                        int prevSlack;
                        if (!fanIn.TryGetValue(driver, out prevSlack) ||
                            prevSlack > slack)
                        {
                            fanIn[driver] = slack;
                        }
                    }
                }
            }

            object           iclass = mapping.TASite.Host.GetType();
            HashSet <object> fuSet;

            if (!_fuCount.TryGetValue(iclass, out fuSet))
            {
                fuSet            = new HashSet <object>();
                _fuCount[iclass] = fuSet;
            }
            fuSet.Add(mapping.TASite);
        }
Esempio n. 3
0
        public EAllocationDecision SelectBestMapping(XIL3Instr instr, long cstep, IEnumerable <IXILMapping> mappings, out IXILMapping bestMapping)
        {
            foreach (int rslot in instr.ResultSlots)
            {
                _interlinks[rslot] = new Interlink(rslot);
            }

            bestMapping = null;
            double bestCost = double.MaxValue;

            foreach (var mapping in mappings)
            {
                var sources = instr.OperandSlots.Select(os => _interlinks[os]).ToArray();
                var sinks   = instr.ResultSlots.Select(rs => _interlinks[rs]).ToArray();

                var    verbs   = mapping.Realize(sources, sinks);
                long   curStep = cstep;
                double cost    = 0.0;
                foreach (var verb in verbs)
                {
                    var pflow = verb.ToCombFlow();
                    foreach (var flow in pflow.Flows)
                    {
                        var sflow = flow as SignalFlow;
                        if (sflow == null)
                        {
                            continue;
                        }

                        if (sflow.Source.Desc.HasAttribute <int>() &&
                            !sflow.Target.Desc.HasAttribute <int>())
                        {
                            int index  = sflow.Source.Desc.QueryAttribute <int>();
                            var driver = _interlinks[index].Driver;
                            if (driver == null)
                            {
                                continue;
                            }

                            var fanIn = _fanIn[sflow.Target.Desc];
                            foreach (int v in fanIn.Values)
                            {
                                cost += Math.Pow(2.0, -v);
                            }
                            int prevSlack;
                            if (fanIn.TryGetValue(driver, out prevSlack))
                            {
                                cost -= Math.Pow(2.0, -prevSlack);
                            }
                            int slack = (int)(curStep - _interlinks[index].DriveTime);
                            cost += Math.Pow(2.0, -slack);
                        }
                    }

                    curStep++;
                }

                cost /= instr.OperandSlots.Length;

                if (cost < bestCost)
                {
                    bestCost    = cost;
                    bestMapping = mapping;
                }
            }

            object iclass   = mappings.First().TASite.Host.GetType();
            var    fuSet    = _fuCount[iclass];
            int    curCount = fuSet.Count;

            int limit;

            if (!FULimits.TryGetValue(iclass, out limit))
            {
                limit = int.MaxValue;
            }

            if (curCount < limit &&
                bestCost > MaxCost)
            {
                return(EAllocationDecision.AllocateNew);
            }
            else
            {
                return(EAllocationDecision.UseExisting);
            }
        }