如何使用Windows 7中的所有核心?

时间:2010-06-16 17:29:58

标签: c windows-7 multicore

我不确定这是否属于Stackoverflow或超级用户,但我想我会问这里。

我有一个用C语言编写的基于控制台的应用程序,目前在Windows 7 64位操作系统中需要大约一个小时才能终止。任务管理器报告该应用程序仅使用可用CPU的25%。我想通过增加cpu使用来减少运行时间。

有没有办法让应用程序使用所有四个核心(笔记本电脑有Core i5)而不只是一个?我假设任务管理器报告25%,因为只有一个核心被分配给该程序。

5 个答案:

答案 0 :(得分:15)

如果不重新编写应用程序为multi = threaded no,则无法更改应用程序的行为。 您可以做的唯一事情是,如果应用程序可以处理输入数据的范围,那么您可以启动具有不同输入数据范围的应用程序的4个实例来处理,并在完成所有结果后合并结果。

  

想象一下渲染3D动画和   渲染器是单线程的,但是   您可以指定开始和结束帧。   你有100帧渲染你   将启动4个实例,并指定   开始和结束帧范围0 - 25,26    - 50,51 - 75,76 - 100.然后你将所有的输出结合到你的   最终的电影文件。

答案 1 :(得分:7)

应用程序需要以多线程方式编写才能使用多个内核。没有办法让单线程应用程序使用多个核心。

答案 2 :(得分:4)

你可以看一下使用OpenMP或POSIX线程,我建议使用OpenMP,因为它有一个非常基本的结构,根据你的程序可以快速简单地实现。

答案 3 :(得分:3)

目前还没有用于将任意C程序转换为多线程程序的标准工具。因此,如果作为开发人员,您没有显式编写多线程代码,请不要指望您的程序一次使用多个核心,除非您调用使用线程编写的第三方库函数。

为了更好地使用CPU,你可以做的最多(如果相关)是将输入切分为N个块,并在每个块上多次运行程序,然后做一些事情来组合输入一旦它们全部完成。

答案 4 :(得分:2)

迂腐地说,您的应用程序已经在使用所有核心。如上所述,没有一个特定的核心分配给流程(除非您明确努力将流程绑定到一个特定的核心)。

该进程使用所有核心,但它依次使用它们 :它在一个核心上运行一点,然后在另一个核心上运行一点,依此类推。即平均而言,您的应用程序消耗的CPU时间均匀分布在系统中的所有核心上。由于在任何给定的时刻只使用一个内核,CPU负载永远不会超过25%的限制(您的系统显然有4个内核)。

如果要超过25%的限制,则必须能够同时使用两个或更多个 核心,这意味着至少部分代码必须并行运行 < / em>的。为此,必须专门编写应用程序以并行运行。普通的单线程应用程序本身永远不会这样做。