c++ - 如何从理论上计算嵌套循环的运行时间?

标签 c++ for-loop nested runtime

<分区>

我在 C++ 中有一个嵌套的 for 循环:

for(i=0;i<10000000;i++)
{
for(j=0;j<999999;j++)
    {
        //execute something
    }
}

我想知道:

  • 此代码完成运行所需的小时数。
  • 使用具有更多 RAM 和内核的机器是否会提高运行时间?
  • 我选择的语言(MATLAB、Python、C/C++)将如何影响运行时?

最佳答案

如果你只是要求测量你可以使用的时间

#include <ctime>

int start_s=clock();
    // code
int stop_s=clock();
cout << "time (in milis): " << (stop_s-start_s)/double(CLOCKS_PER_SEC)*1000;

但如果您想知道如果获得更多 ram 或更多 cpu 内核,这个运行时是否会更好,这就是您所需要的:

简短的回答:它取决于“//执行某事” block

长答案: 它不直接取决于循环边界是什么,它只取决于你在嵌套循环中做了什么 这里有一些双循环的例子来证明这一点

如果你正在处理公式,那么使用更高的 cpu 频率会更好

请注意,核心数与运行时间无关,因为默认情况下代码未并行化

sum = 0;
for(i=0;i<10000000;i++)
    for(j=0;j<999999;j++)
        sum+=1;

如果你正在处理数组,那么你的 RAM 可以使用 spatial/temporal locality但是保存在内存中的数组部分受到其他参数的限制,因此更大的 RAM 不会做太多但使用更高的 RAM 频率会更好

int arr[10000000][999999];
arr[0][0] = 0;
for(i=1;i<10000000;i++)
    for(j=1;j<999999;j++)
        arr[i][j]=arr[i-1][j-1];

如果您正在处理磁盘/缓冲区操作,那么您的 RAM 或 cpu 都无法对其进行超过一定程度的优化 - 硬件是瓶颈 -

    for(i=0;i<10000000;i++)
        for(j=0;j<999999;j++)
            cout << "yes";

    ofstream file;
    file.open ("out.txt");
    for(i=0;i<10000000;i++)
        for(j=0;j<999999;j++)
            file << "Writing to the file.\n";

关于c++ - 如何从理论上计算嵌套循环的运行时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47259628/

相关文章:

java - ArrayList 中的循环不起作用(Get() 方法)

mongodb - 最佳实践 Mongoid :NestedResources

asp.net - 嵌套字典到嵌套转发器 asp.net c#

c++ - 从 C++ 获取 shell 环境变量

c++ - 使用 boost 标记化给出相同的输出

c - 为什么循环中的值永远不会大于2?

codeigniter - * foreach 里面的 foreach codeigniter 2?

c++ - 幂集 ~ 递归 ~ Hasse 图

c++ - OpenGL ES 2 glGetActiveAtrib 和非 float

java - 如果在主方法中声明并在循环内进行初始化,那么从 For 循环外部访问变量是否不可能在 Java 中?