如何修复程序上的错误以衡量性能

How to fix errors on the program to measure the performance

我想衡量有关矩阵乘法的代码的性能。

虽然我能够执行一个简单的程序并得到正确的答案,但我想要得到结果的程序却无法成功编译。

如何修复这些错误?

我尝试执行下面的简单程序来理解 C++ 中时间测量的基础知识。

输出

3seconds
#include <chrono>
#include <iostream>
#include <thread>

using namespace std::chrono;

int main()
{
  // 1. current date and time
  high_resolution_clock::time_point begin = high_resolution_clock::now();

  // 2. process to take time
  std::this_thread::sleep_for(seconds(3));

  // 3. current date and time 
  high_resolution_clock::time_point end = high_resolution_clock::now();

  // aquired passed time
  seconds elapsed_time = duration_cast<seconds>(end - begin);
  std::cout << elapsed_time.count() << "seconds" << std::endl;
}
#include <chrono>
#include <iostream>
#include <thread>

using namespace std::chrono;

int main()
{
    #define N 2

    double A[N][N] = {
        {1.0, 2.0},
        {2.0, 1.0}
    };

    double B[N][N] = {
        {3.0, 1.0},
        {0.0, 3.0}
    };

    double C[N][N] = {
        {0.0, 0.0},
        {0.0, 0.0}
    };
    int i, j, k;

    for(i=0; i<N; i++)
        for(j=0; j<N; j++)
            for(k=0; k<N; k++)
                C[i][j] += A[i][k]*B[k][j];


  // aquire the passed time
  seconds elapsed_time = duration_cast<seconds>(end - begin);
  std::cout << elapsed_time.count() << "seconds" << std::endl;
}
$ g++ -o clock clock.cpp
clock.cpp:34:49: error: use of undeclared identifier 'end'
  seconds elapsed_time = duration_cast<seconds>(end - begin);
                                                ^
clock.cpp:34:55: error: use of undeclared identifier 'begin'
  seconds elapsed_time = duration_cast<seconds>(end - begin);
                                                      ^
2 errors generated.

您忘记声明和初始化 beginend

尝试:

#include <chrono>
#include <iostream>
#include <thread>

using namespace std::chrono;

int main()
{
    #define N 2

    // being
    high_resolution_clock::time_point begin = high_resolution_clock::now();



    double A[N][N] = {
        {1.0, 2.0},
        {2.0, 1.0}
    };

    double B[N][N] = {
        {3.0, 1.0},
        {0.0, 3.0}
    };

    double C[N][N] = {
        {0.0, 0.0},
        {0.0, 0.0}
    };
    int i, j, k;

    for(i=0; i<N; i++)
        for(j=0; j<N; j++)
            for(k=0; k<N; k++)
                C[i][j] += A[i][k]*B[k][j];


    // end
    high_resolution_clock::time_point end = high_resolution_clock::now();


  // aquire the passed time
  seconds elapsed_time = duration_cast<seconds>(end - begin);
  std::cout << elapsed_time.count() << "seconds" << std::endl;
}

他们的编译器告诉您您正在使用两个没有事先声明的变量。在引用变量之前,您必须通过指定其数据类型来声明变量。