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

时间:2017-11-13 08:10:46

标签: 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 ++)将如何影响运行时间?

1 个答案:

答案 0 :(得分:2)

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

#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内核,这个运行时是否会更好:

简短回答:这取决于“//执行某事”块

答案很长: 它不直接取决于循环边界是什么,它只取决于你在嵌套循环中做了什么 这里有几个双循环示例来演示这个

如果您正在处理公式,那么使用更高的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";