0

我写了一个程序来解决一个复杂的问题。该程序只是ac#控制台应用程序,在计算部分完成之前不会执行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

4 回答 4

1

您的 i7 支持超线程,因此四核 i7 可以同时处理八个线程。

您的程序似乎使用了一个线程,因此 Windows 任务管理器将向您显示 12 - 13 % 的 CPU 使用率,这仅仅是因为您使用了八个可用的“虚拟”CPU 之一。

正如 HeavyWave 所说,您需要找到一种方法将计算拆分为更多线程,您可以并行运行以获得更高的 cpu 使用率。

于 2010-04-01T21:33:19.420 回答
1

Intel i7 应报告为 8 个内核(4 个物理内核,由于超线程,每个都报告为 2 个内核)。

通过启动一个单线程,总体上您应该获得 12.5% 的 CPU。这几乎完全符合您的描述。

一个线程不能也不会跨多个核心运行,消耗所有资源。如果要使用更多资源,则需要启动多个线程。理想情况下,您至少需要 4 个线程,更可能需要 6 到 8 个线程才能接近 100% 的利用率。

为此,您需要找到一种方法将“复杂问题”分解为可并行化的指令路径。

于 2010-04-01T21:42:57.737 回答
0

1个线程只能占用1个核心,所以你需要将任务分成几个线程来利用你的CPU。您绝对确定您没有在算法中进行 IO 操作吗?

于 2010-04-01T02:56:27.263 回答
0

找出它花费时间在做什么,百分比。这是我使用的方法,无论平台如何。我有一些程序,我确信我没有做任何 I/O,你猜怎么着?我是,出于最模糊的原因。

于 2010-04-01T21:14:48.387 回答