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