如何利用我的计算资源

时间:2010-04-01 02:41:43

标签: c# performance multithreading utilization

我写了一个程序来解决一个复杂的问题。这个程序只是一个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。我想知道如何提高硬件的利用率。

非常感谢

4 个答案:

答案 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并猜测是什么?我是,出于最不起眼的原因。