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); }
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); } }
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); }
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); } }
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); } }
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++; } }