C++ 程序执行时间的粗略估计
如何获得普通pc上程序所用时间的大致概念,以便根据输入,我可以知道我的算法是否会在给定的时间限制(2秒等)下获得TLE 假设我必须遍历一个大小为10^6、10^7、10^7等的数组 我认为遍历10^6数组需要1秒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秒 如果有人能解释清楚的话。检查当前处理器每个周期的指令,然后我会查看汇编代码并计算所需的周期数 一旦你有了周期数,就把它乘以周期时间。在这种情况下,需要考虑几个因素才能得出任何结论 每个机器/装配指令需要一个或多个时钟周期才能完成 获取程序的汇编代码后,可以使用以下公式计算总时间: 执行
如果有人能解释清楚的话。检查当前处理器每个周期的指令,然后我会查看汇编代码并计算所需的周期数
一旦你有了周期数,就把它乘以周期时间。在这种情况下,需要考虑几个因素才能得出任何结论 每个机器/装配指令需要一个或多个时钟周期才能完成 获取程序的汇编代码后,可以使用以下公式计算总时间:
执行时间=周期总数*时钟周期时间=指令计数*每条指令的周期*时钟周期时间
通常,无法直接估计处理大小为10^6的数组的总时间为1秒
执行程序的时间可能取决于以下因素:
有太多的变量可以影响这一点。“大小数组”和“遍历”也都非常模糊。阵列存储什么?你真的只是在遍历数组的内存吗?或者你在用它做什么?您启用了哪种优化?你在使用什么特殊功能吗?例如,清除内存比将字节设置为特定值更快。在Linux上,请参阅。也读一些书,比如关于。一般来说,你需要对你的代码进行评测和基准测试。一个好方法是在你的普通电脑上运行程序并计时。也被称为“基准测试”。我想要一个普通的i5,i3个人电脑的想法。就像在一些竞赛中,我们得到了一些执行时间限制为1~2秒的程序,然后决定算法,其时间复杂度为n^2,nlogn如果该算法值得考虑,或者我们需要考虑另一种解决方案,我们可以根据输入数字n了解时间的长短……因此在编写程序之前,我们需要大致了解。现代CPU非常复杂,而且由于多层缓存的影响,很难计算周期,流水线使得循环计数变得非常困难。你说的是“缓存线”,但实际上在现代CPU上有多个不同的缓存。您的回答表明,从汇编代码估算时间是很容易的(虽然很乏味),但实际上这是非常困难的。正确,先生。这就是为什么我提到“最接近的估计”。