我写了个程序来解决的一个复杂的问题。这个程序只是一个c#控制台应用程序并没有控制台。写到计算部完成,所以输出不会影响性能。该计划是这样的:

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时间。其实我有一个i7英特尔处理6G三道DDR3存储器。我想知道我如何可以改善利用我的硬件。

非常感谢

有帮助吗?

解决方案

1个线程只能占据1个核心,所以你需要将任务分成多个线程利用你的CPU。是你绝对肯定你是不是做的IO操作在你的算法?

其他提示

您i7的支撑超线程,所以四核I7可以同时处理8个线程。

您似乎程序使用一个线程,所以在Windows任务管理器会告诉你的12 CPU使用率 - 13%,仅仅是因为你使用了八个可用的“虚拟”的CPU之一

由于HeavyWave说,你需要找到一种方法,你的计算分成多个线程可以并行运行,以获得更高的CPU使用率。

这是英特尔I7应8个核报告(4个物理核心,每个报告2-核,由于超线程)。

通过启动一个单独的线程,你应该得到的CPU的12.5%,总体。这几乎是完美的内嵌你的描述。

一个线程不能并且不会在多个内核消耗所有的资源运行。 如果您想使用更多的资源,你需要启动多个线程。理想的情况下,就需要一个最小的4个线程,而更可能为6〜8个线程,以接近100%的利用率。

要做到这一点,你需要找到一种方法,打破了你的“复杂的问题”变成并行指令的路径。

找出是什么花这是时间这样做,百分明智的。 这是方法使用,不论的平台。 我已经计划在那里我很确定我没有做任何I/O你猜怎么着?我是,对于最不起眼的原因。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top