代码之家  ›  专栏  ›  技术社区  ›  vad

如何使用Windows7中的所有核心?

  •  5
  • vad  · 技术社区  · 14 年前

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

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

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

    5 回复  |  直到 14 年前
        1
  •  15
  •   user177800    14 年前

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

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

        2
  •  7
  •   Coding Flow    14 年前

    为了使用多个核心,应用程序需要以多线程的方式编写。无法使单线程应用程序使用多个核心。

        3
  •  4
  •   Brett    14 年前

    您可以考虑使用OpenMP或POSIX线程,我建议您使用OpenMP,因为它有一个非常基本的结构,这取决于您的程序可以使实现快速而简单。

        4
  •  3
  •   Uri    14 年前

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

    为了更好地使用你的CPU,你所能做的最多的(如果在你的情况下相关的话)就是把你的输入分割成n个块,在每个块上多次运行程序,然后在所有的输入都完成之后,做些事情把它们组合起来。

        5
  •  2
  •   AnT stands with Russia    14 年前

    从教育角度讲,您的应用程序已经使用了所有核心。正如您上面所说,没有为流程分配任何特定的核心(除非您做出明确的努力将流程与一个特定的核心绑定在一起)。

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

    如果您想超过25%的限制,您必须能够使用两个或多个核心 同时 也就是说至少要运行一些代码 并行地 . 为了做到这一点,必须专门编写应用程序以并行运行。一个普通的单线程应用程序永远不会自己这样做。