Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 程序执行时间的粗略估计_C++_Algorithm_Programming Languages_Coding Efficiency - Fatal编程技术网

C++ 程序执行时间的粗略估计

C++ 程序执行时间的粗略估计,c++,algorithm,programming-languages,coding-efficiency,C++,Algorithm,Programming Languages,Coding Efficiency,如何获得普通pc上程序所用时间的大致概念,以便根据输入,我可以知道我的算法是否会在给定的时间限制(2秒等)下获得TLE 假设我必须遍历一个大小为10^6、10^7、10^7等的数组 我认为遍历10^6数组需要1秒 如果有人能解释清楚的话。检查当前处理器每个周期的指令,然后我会查看汇编代码并计算所需的周期数 一旦你有了周期数,就把它乘以周期时间。在这种情况下,需要考虑几个因素才能得出任何结论 每个机器/装配指令需要一个或多个时钟周期才能完成 获取程序的汇编代码后,可以使用以下公式计算总时间: 执行

如何获得普通pc上程序所用时间的大致概念,以便根据输入,我可以知道我的算法是否会在给定的时间限制(2秒等)下获得TLE

假设我必须遍历一个大小为10^6、10^7、10^7等的数组

我认为遍历10^6数组需要1秒


如果有人能解释清楚的话。

检查当前处理器每个周期的指令,然后我会查看汇编代码并计算所需的周期数


一旦你有了周期数,就把它乘以周期时间。

在这种情况下,需要考虑几个因素才能得出任何结论

每个机器/装配指令需要一个或多个时钟周期才能完成

获取程序的汇编代码后,可以使用以下公式计算总时间:

执行时间=周期总数*时钟周期时间=指令计数*每条指令的周期*时钟周期时间

通常,无法直接估计处理大小为10^6的数组的总时间为1秒

执行程序的时间可能取决于以下因素:

  • 处理器:要找到最接近的估计值,您可以阅读处理器手册,获取一条指令的每条指令的周期数(因为不同的指令需要不同的周期数才能失效),并使用上述公式

  • 数据/操作数:操作数的大小(在您的例子中是数组中的数据)对延迟有影响

  • 缓存:访问同一缓存线上的数据所需的时间相同。因此,总时间还取决于CPU需要访问的缓存线总数

  • 编译器优化:现代编译器在优化不涉及读/写操作的代码方面非常聪明。在您的例子中,您只是遍历数组,而没有执行任何操作。因此,由于优化,穿越阵列可能需要不到1秒的时间


  • 有太多的变量可以影响这一点。“大小数组”和“遍历”也都非常模糊。阵列存储什么?你真的只是在遍历数组的内存吗?或者你在用它做什么?您启用了哪种优化?你在使用什么特殊功能吗?例如,清除内存比将字节设置为特定值更快。在Linux上,请参阅。也读一些书,比如关于。一般来说,你需要对你的代码进行评测和基准测试。一个好方法是在你的普通电脑上运行程序并计时。也被称为“基准测试”。我想要一个普通的i5,i3个人电脑的想法。就像在一些竞赛中,我们得到了一些执行时间限制为1~2秒的程序,然后决定算法,其时间复杂度为n^2,nlogn如果该算法值得考虑,或者我们需要考虑另一种解决方案,我们可以根据输入数字n了解时间的长短……因此在编写程序之前,我们需要大致了解。现代CPU非常复杂,而且由于多层缓存的影响,很难计算周期,流水线使得循环计数变得非常困难。你说的是“缓存线”,但实际上在现代CPU上有多个不同的缓存。您的回答表明,从汇编代码估算时间是很容易的(虽然很乏味),但实际上这是非常困难的。正确,先生。这就是为什么我提到“最接近的估计”。