Time 与操作数相关的计算时间

Time 与操作数相关的计算时间,time,cpu,operations,Time,Cpu,Operations,是否可以根据进程执行的操作数和CPU的速度(以GHz为单位)来计算进程的计算时间? 例如,我有一个For循环,它总共执行5*10^14个循环。如果在2.4 GHz处理器上运行,以秒为单位的计算时间是否为:5*10^14/2.4*10^9=208333秒? 如果进程在4个内核上并行运行,时间会减少4个吗? 谢谢您的帮助。不,仅根据操作数计算计算时间是不可能的。首先,根据你的问题,听起来你在谈论一些高级编程语言中的代码行数,因为你提到了for循环。因此,根据编译器的优化级别,您可以看到不同的计算时间

是否可以根据进程执行的操作数和CPU的速度(以GHz为单位)来计算进程的计算时间? 例如,我有一个For循环,它总共执行5*10^14个循环。如果在2.4 GHz处理器上运行,以秒为单位的计算时间是否为:5*10^14/2.4*10^9=208333秒? 如果进程在4个内核上并行运行,时间会减少4个吗?
谢谢您的帮助。

不,仅根据操作数计算计算时间是不可能的。首先,根据你的问题,听起来你在谈论一些高级编程语言中的代码行数,因为你提到了for循环。因此,根据编译器的优化级别,您可以看到不同的计算时间结果,这取决于所做的优化类型

但是,即使您讨论的是汇编语言操作,也不可能仅根据指令数和CPU速度来计算计算时间。某些指令可能需要多个CPU周期。如果有大量内存访问,则可能会出现缓存未命中,并且必须从磁盘加载数据,这是不可预测的

此外,如果您关心的时间是程序开始执行到完成之间经过的实际时间量,那么计算机上运行的其他进程会占用CPU时间,这是一个额外的混淆变量。在磁盘读取和其他慢速操作中,操作系统应该是很好的上下文切换,这样程序就不会在计算过程中停止,但是不能指望这样做不会丢失一些计算时间。
就在四个内核上并行运行而言,程序不能仅仅靠自身来完成。实际上,您需要以并行程序的形式编写程序。for循环本身就是一个顺序操作。为了在四个独立的内核上运行四个进程,您需要使用fork系统调用,并有一些方法在四个进程之间分配工作。如果你把工作分成四个过程,你能得到的最大加速是4倍,但在大多数情况下,不可能达到理论上的最大加速。如何接近取决于如何平衡四个进程之间的工作以及需要多少开销来确保并行进程成功地协同工作以生成正确的结果。

实际上我在Windows下讨论C++编写的代码,但我没有提到行的数目。但是到了完成for循环所需的时间。我将尝试使用fork系统调用来使用这四个内核,但是,如果我理解正确,就无法确定程序完成执行之前的实际时间。谢谢。@user3764418这可不像打电话给fork那么简单。您需要确保您的代码是真正可并行的,然后您需要确保工作在四个进程之间正确分配。同样,fork不能保证进程在单独的core上运行。我想我可能应该尝试优化嵌套for循环。这是代码片段:forint i=0;i