gpt4 book ai didi

python - C++ 中足够大的 problemSize 需要 0 运行时间

转载 作者:搜寻专家 更新时间:2023-10-31 02:02:50 24 4
gpt4 key购买 nike

这段用来演示算法复杂度和Measuring the Run Time of an Algorithm的代码来自一本书FUNDAMENTALS OF PYTHON: FROM FIRST PROGRAMS THROUGH DATA STRUCTURES

"""
File: timing1.py
Prints the running times for problem sizes that double,
using a single loop.
"""

import time

problemSize = 10000000
print "%12s%16s" % ("Problem Size", "Seconds")
for count in xrange(5):

start = time.time()
# The start of the algorithm
work = 1
for x in xrange(problemSize):
work += 1
work -= 1
# The end of the algorithm
elapsed = time.time() - start

print "%12d%16.3f" % (problemSize, elapsed)
problemSize *= 2

这段代码运行良好,我正在尝试用 C++ 进行类似的试验。这是代码 (snippet_2)

#include <iostream>
#include <chrono>

using namespace std;
using namespace std::chrono;

void functiona()
{
long long number = 0;
long long problemSize = 100000000000;

for( long long i = 0; i < problemSize; ++i )
{
for(long long j = 0; j < problemSize; j++)
{
for(long long k = 0; k < problemSize; k++)
{
for(long long l = 0; l < problemSize; l++)
{
for(long long l = 0; l < problemSize; l++)
{
number++;
number--;
}
}
}
}
}
}

int main()
{
high_resolution_clock::time_point t1 = high_resolution_clock::now();
functiona();
high_resolution_clock::time_point t2 = high_resolution_clock::now();

auto duration = duration_cast<microseconds>( t2 - t1 ).count();

cout << duration;
return 0;
}

不过我猜问题大小足够大,snippet_2 输出 0。

我错过了什么?

最佳答案

当人们忘记 C++ 是什么 时就会发生这种情况。您的源代码不是计算机芯片一次执行一个指令的序列。它是程序的描述。它是一种抽象

人们喜欢谈论优化这个和 Release模式那个。人们喜欢把优化器当作是事后才想到的,在你的构建过程结束时附加到原本会与你输入的语句逐行匹配的地方。它不是。这是获取抽象程序并从中创建真实内容的基本部分(阅读:编译过程)。将优化级别命名为“努力级别”会更好:编译器需要付出多少努力才能从您的文字中越走越远,以寻找能够在计算机芯片上快速良好执行的真实程序。

您的代码,尽管是以一种非常迂回的方式,描述了一个没有实现任何目标的程序。因此,您应该非常期待一个体面的编译器生成一个不做任何有意义工作的可执行文件。

当然,您可以用副作用、等等等等以及其他您一开始实际上不需要测量的东西来欺骗它,但这只是没有捕获要点。相反,基准测试实际的、有用的工作。其他任何事情都只是在浪费您自己的时间!

如果您的程序需要延迟,请使用 std::this_thread::sleep_for .

它在 Python 中有所不同,因为它是一种解释型脚本语言,[通常] 在执行之前不经过任何翻译。这就是为什么您正在阅读的书谈论的是 Python,而不是 C++。从 Python 获取概念并尝试将它们应用到 C++ 通常是愚蠢的。

关于python - C++ 中足够大的 problemSize 需要 0 运行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56552706/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com