我想创建一个小型测试,用于执行一些计算以查看处理器的完成速度。例如,我想获取一台机器的CPU信息,然后运行像这样一个试验:如何在多个内核/处理器上分割工作
public static double SumRootN(int root)
{
double result = 0;
for (int i = 1; i < 10000000; i++)
{
result += Math.Exp(Math.Log(i)/root);
}
return result;
}
private void buttonStart_Click(object sender, EventArgs e)
{
labelPhysicalProcessors.Text = "";
labelProcessorName.Text = "";
labelLogicalProcessors.Text = "";
labelCores.Text = "";
this.Cursor = Cursors.WaitCursor;
string physicalProcessors = String.Empty;
string processorName = String.Empty;
string logicalProcessors = String.Empty;
string coreCount = String.Empty;
foreach (var item in new System.Management.ManagementObjectSearcher("Select * from Win32_ComputerSystem").Get())
{
physicalProcessors = item["NumberOfProcessors"].ToString();
logicalProcessors = item["NumberOfLogicalProcessors"].ToString();
}
foreach (var item in new System.Management.ManagementObjectSearcher("Select * from Win32_Processor").Get())
{
coreCount = item["NumberOfCores"].ToString();
processorName = item["Name"].ToString();
}
labelPhysicalProcessors.Text = physicalProcessors;
labelProcessorName.Text = processorName;
labelLogicalProcessors.Text = logicalProcessors;
labelCores.Text = coreCount;
var watch = Stopwatch.StartNew();
Parallel.For(2, 20, (i) =>
{
var result = SumRootN(i);
//Console.WriteLine("root {0} : {1} ", i, result);
});
labelTime.Text = watch.ElapsedMilliseconds.ToString() + " ms";
this.Cursor = Cursors.Arrow;
}
这将产生:
我想借此对CPU内核和逻辑处理器数量的优势。我该如何在C#中完成这项工作,即如果一个machie拥有更多的核心,那么我想将工作分解到每个核心上,这样具有更多核心和逻辑处理器的机器就可以更快地运行测试。
'Parallel.For'应该已经做了类似于你所问的事情......有什么不适合那个? –
感谢您的回复。我的解决方案很有用,但我想确保我专门给每个核心提供部分工作。我想构建一个可靠的测试工具,我可以用它来“测试”不同类型的处理器。 –
国际海事组织更适合codereview.stackexchange.com – Rotem