如何利用我的计算资源
-
23-09-2019 - |
题
我写了个程序来解决的一个复杂的问题。这个程序只是一个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你猜怎么着?我是,对于最不起眼的原因。
不隶属于 StackOverflow