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

How to fix errors on the program to measure the performance

本文关键字:性能 错误 何修复 程序上      更新时间:2023-10-16

我想测量关于矩阵乘法的代码的性能。

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

如何修复这些错误?

我试图执行以下简单的程序来理解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;
}

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