【问题标题】:How to utilize my computation resources如何利用我的计算资源
【发布时间】:2010-04-01 02:41:42
【问题描述】:

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

非常感谢

【问题讨论】:

  • 您可以随时用我的处理器交换您的处理器。我会向您保证至少 60% 的使用量。

标签: c# performance multithreading utilization


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

      1 个线程只能占用 1 个核心,因此您需要将任务分成多个线程来使用您的 CPU。你确定你没有在你的算法中做 IO 操作吗?

      【讨论】:

      • 好吧,也许您的 CPU 大部分时间都在等待内存。在任何情况下,如果使用 1 个线程,您将无法使用超过 25% 的 CPU。
      【解决方案4】:

      找出它花费时间在做什么,百分比。 This is the method I use, regardless of platform. 我有一些程序我确信我没有做任何 I/O,你猜怎么着?我是,出于最模糊的原因。

      【讨论】:

        猜你喜欢
        • 2021-07-09
        • 2012-03-14
        • 2017-10-05
        • 2021-08-08
        • 2016-12-14
        • 2021-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多