我想测量关于矩阵乘法的代码的性能。
虽然我能够执行一个简单的程序并得到正确的答案,但我想得到结果的程序无法成功编译。
如何修复这些错误?
我试图执行以下简单的程序来理解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.
你忘了声明和初始化begin
和end
。
尝试:
#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;
}
编译器告诉您,您正在使用两个变量而没有事先声明。在引用变量之前,必须通过指定变量的数据类型来声明变量。