Esempio n. 1
0
        private static Cpuid[][] GroupThreadsByCore(IEnumerable <Cpuid> threads)
        {
            var cores =
                new SortedDictionary <uint, List <Cpuid> >();

            foreach (var thread in threads)
            {
                cores.TryGetValue(thread.CoreId, out var coreList);
                if (coreList == null)
                {
                    coreList = new List <Cpuid>();
                    cores.Add(thread.CoreId, coreList);
                }

                coreList.Add(thread);
            }

            var coreThreads = new Cpuid[cores.Count][];
            var index       = 0;

            foreach (var list in cores.Values)
            {
                coreThreads[index] = list.ToArray();
                index++;
            }

            return(coreThreads);
        }
Esempio n. 2
0
        public override bool InitializeHardware()
        {
            try {
                var cpuidsByProcessor = Cpuid.Get();
                foreach (var cpuId in cpuidsByProcessor.Keys)
                {
                    var cpu = new IntelCpu(cpuidsByProcessor[cpuId]);
                    cpu.InitializeSensors();
                    AddHardware(cpu);
                }

                return(true);
            } catch (Exception e) {
                Logger.Error("Unable to initialize CPUID hardware", e);
                return(false);
            }
        }
Esempio n. 3
0
        private static Cpuid[][] GetProcessorThreads()
        {
            var threads = new List <Cpuid>();

            for (var i = 0; i < 64; i++)
            {
                try
                {
                    threads.Add(new Cpuid(i));
                }
                catch (ArgumentOutOfRangeException)
                {
                }
            }

            var processors =
                new SortedDictionary <uint, List <Cpuid> >();

            foreach (var thread in threads)
            {
                processors.TryGetValue(thread.ProcessorId, out var list);
                if (list == null)
                {
                    list = new List <Cpuid>();
                    processors.Add(thread.ProcessorId, list);
                }

                list.Add(thread);
            }

            var processorThreads = new Cpuid[processors.Count][];
            var index            = 0;

            foreach (var list in processors.Values)
            {
                processorThreads[index] = list.ToArray();
                index++;
            }

            return(processorThreads);
        }
Esempio n. 4
0
        public void AppendThread(Cpuid thread, int numaId, int coreId)
        {
            NumaNode node = null;

            foreach (var n in Nodes)
            {
                if (n.NodeId == numaId)
                {
                    node = n;
                }
            }
            if (node == null)
            {
                node = new NumaNode(mainCpu, numaId);
                Nodes.Add(node);
            }

            if (thread != null)
            {
                node.AppendThread(thread, coreId);
            }
        }
Esempio n. 5
0
        public void AppendThread(Cpuid thread, int coreId)
        {
            RyzenCore core = null;

            foreach (var c in Cores)
            {
                if (c.CoreId == coreId)
                {
                    core = c;
                }
            }
            if (core == null)
            {
                core = new RyzenCore(_hw, coreId);
                Cores.Add(core);
            }

            if (thread != null)
            {
                core.Threads.Add(thread);
            }
        }
Esempio n. 6
0
        public CpuCollection()
        {
            _list = new List <Cpu>();

            Ring0.Open();
            Opcode.Open();

            var processorThreads = GetProcessorThreads();
            var _threads         = new Cpuid[processorThreads.Length][][];

            var index = 0;

            foreach (var threads in processorThreads)
            {
                if (threads.Length == 0)
                {
                    continue;
                }

                var coreThreads = GroupThreadsByCore(threads);

                _threads[index] = coreThreads;

                switch (threads[0].Vendor)
                {
                case Vendor.Intel:
                    _list.Add(new IntelCpu(index, coreThreads));
                    break;

                case Vendor.Amd:
                    switch (threads[0].Family)
                    {
                    case 0x0F:
                        _list.Add(new AmdCpu0(index, coreThreads));
                        break;

                    case 0x10:
                    case 0x11:
                    case 0x12:
                    case 0x14:
                    case 0x15:
                    case 0x16:
                        _list.Add(new AmdCpu10(index, coreThreads));
                        break;

                    case 0x17:
                        _list.Add(new AmdCpu17(index, coreThreads));
                        break;

                    default:
                        _list.Add(new Cpu(index, coreThreads));
                        break;
                    }

                    break;

                default:
                    _list.Add(new Cpu(index, coreThreads));
                    break;
                }

                index++;
            }
        }