我写了一个程序来解决一个复杂的问题。这个程序只是一个c#控制台应用程序,在计算部分完成之前不会执行console.write,因此输出不会影响性能。 该计划是这样的:
static void Main(string[] args)
{
Thread WorkerThread = new Thread(new ThreadStart(Run), StackSize);
WorkerThread.Priority = ThreadPriority.Highest;
WorkerThread.Start();
Console.WriteLine("Worker thread is runing...");
WorkerThread.Join();
}
现在需要3分钟才能运行,当我打开任务管理器时,我发现它只占用了12%的cpu时间。我实际上有一个带有6G三通道DDR3内存的i7 intel cpu。我想知道如何提高硬件的利用率。
非常感谢
答案 0 :(得分:1)
您的i7支持超线程,因此四核i7可同时处理八个线程。
您的程序似乎使用一个线程,因此Windows任务管理器将显示CPU使用率为12 - 13%,原因很简单,因为您使用了八个可用的“虚拟”CPU中的一个。
正如HeavyWave所说,你需要找到一种方法将你的计算分成更多的线程,你可以并行运行以获得更高的CPU使用率。
答案 1 :(得分:1)
英特尔i7应报告为8个内核(4个物理内核,由于超线程,每个内核报告为2个内核)。
通过启动一个单独的线程,总体上应该获得12.5%的CPU。这与你描述的几乎完全一致。
一个线程不能也不会在消耗所有资源的多个核心上运行。 如果要使用更多资源,则需要启动多个线程。理想情况下,您至少需要4个线程,更可能需要6到8个线程才能达到100%的利用率。
为此,您需要找到一种方法将“复杂问题”分解为可并行化的指令路径。
答案 2 :(得分:0)
1个线程只能占用1个核心,因此您需要将任务分成几个线程来利用您的CPU。你绝对确定你没有在你的算法中进行IO操作吗?
答案 3 :(得分:0)
找出它花费的时间,百分比。 This is the method I use, regardless of platform.我有一些程序,我确信我没有做任何I / O并猜测是什么?我是,出于最不起眼的原因。