1
15
如果不将应用程序重新编写为multi=threaded no,则无法更改应用程序的行为。 你唯一能做的就是,如果应用程序能够处理输入数据的范围,那么你就可以启动4个具有不同输入数据范围的应用程序实例来进行处理,并在完成所有操作后将结果组合起来。
|
2
7
为了使用多个核心,应用程序需要以多线程的方式编写。无法使单线程应用程序使用多个核心。 |
3
4
您可以考虑使用OpenMP或POSIX线程,我建议您使用OpenMP,因为它有一个非常基本的结构,这取决于您的程序可以使实现快速而简单。 |
4
3
目前还没有将任意C程序转换为多线程程序的标准工具。因此,如果作为开发人员,您没有显式地编写多线程代码,除非您调用使用线程编写的第三方库函数,否则不要期望您的程序一次使用多个核心。 为了更好地使用你的CPU,你所能做的最多的(如果在你的情况下相关的话)就是把你的输入分割成n个块,在每个块上多次运行程序,然后在所有的输入都完成之后,做些事情把它们组合起来。 |
5
2
从教育角度讲,您的应用程序已经使用了所有核心。正如您上面所说,没有为流程分配任何特定的核心(除非您做出明确的努力将流程与一个特定的核心绑定在一起)。 进程使用所有核心,但它使用它们 顺序地 :它在一个核心上运行一点,然后在另一个核心上运行一点,依此类推。也就是说,平均而言,应用程序消耗的CPU时间平均分布在系统中的所有核心上。由于在任何给定的时刻只使用一个内核,所以CPU负载永远不会超过25%的限制(显然,您的系统有4个内核)。 如果您想超过25%的限制,您必须能够使用两个或多个核心 同时 也就是说至少要运行一些代码 并行地 . 为了做到这一点,必须专门编写应用程序以并行运行。一个普通的单线程应用程序永远不会自己这样做。 |