【发布时间】:2013-12-22 18:13:38
【问题描述】:
我想创建一个小测试来执行一些计算,以查看处理器完成它的速度。例如,我想获取机器的 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# 中执行此操作,即如果机器有更多内核,那么我想将工作拆分到每个内核上,以便具有更多内核和逻辑处理器的机器更快地运行测试。
【问题讨论】:
-
Parallel.For应该已经做了与您所要求的类似的事情......什么不起作用? -
感谢您的回复。我的解决方案有效,但我想确保我专门将部分工作分配给每个内核等。我想构建一个可靠的测试工具,可用于“基准测试”不同类型的处理器。
-
IMO 更适合 codereview.stackexchange.com
-
例如,如果我有 8 个逻辑处理器,我想将我的任务分成 8 个并为每个逻辑处理器分配一个任务,从而减少总时间。
标签: c# parallel-processing task-parallel-library