使C ++全速运行

时间:2013-12-06 15:40:48

标签: c++ processor

为了在某些任务上比较C ++和Java,我创建了两个类似的程序,一个是Java,一个是C ++。当我运行Java时,它需要25%的CPU没有波动,这是你所期望的,因为我使用的是四核。但是,C ++版本仅使用大约8%并且很容易波动。我在同一台计算机上运行这两个程序,在后台运行相同的程序。如何让C ++使用一个完整的核心?这两个程序都没有被任何东西打断。他们都要求提供一些信息,然后进入无限循环,直到你退出程序,给出每秒计算量的反馈。

代码:

http://pastebin.com/5rNuR9wA

http://pastebin.com/gzSwgBC1

http://pastebin.com/60wpcqtn

回答一些问题:

我基本上是循环一堆代码,看看它每秒循环的频率。问题是:它不使用它可以使用的所有CPU。重点是让相同的处理器在Java和C ++中执行相同的任务,并比较每秒的循环量。但是如果一个人使用不规则的CPU时间而另一个人在某个百分比上循环稳定,则很难比较。顺便说一下,如果我要它执行这个:

while(true){}

需要25%,为什么不用我的代码呢?

----编辑:----

经过一些实验后,如果我使用cout语句,我的代码似乎开始使用不到25%。我不清楚为什么一个cout会导致程序使用更少的cpu(我想它会暂停,直到写入语句需要一段时间?

有了这些知识,我将重新编程两个程序(以使它们具有可比性)并让它在60秒后报告结果,而不是每次完成循环。

感谢所有帮助,一些提示非常有用。在我发现答案之后,有人也发现了这个作为答案,所以即使我自己也找不到答案,我也会得到答案。谢谢!

(虽然我想知道为什么std :: cout需要这么长的时间)

2 个答案:

答案 0 :(得分:2)

你的主循环中有一个cout,它将调用操作系统在某个时刻写入累计输出。操作系统时间不计入您的应用程序,或导致某些磁盘IO或其他活动迫使您的程序等待。

答案 1 :(得分:0)

在不考虑竞争cpu时间这一事实的情况下,同时比较这两种情况可能并不准确。操作系统将自动选择这两个任务的时间安排,这两个任务可能会受到首先启动的任务和其他众多标准的影响。

同时运行它们需要某种类型的调度配置,以便每个配置限制为运行一个(或两个)cpu,每个应用程序使用不同的 cpus。这可以通过让每个main函数执行一个执行所有工作的单独线程,然后设置运行该线程的cpu来完成。在c ++ 11中,这可以使用std::thread完成,然后通过获取native_handle并将其设置在那里来设置基础cpu关联。

我不确定如何在Java中执行此操作,但我确信该过程类似。