我有一个在Linux上运行的C++应用程序,我正在优化它.如何确定代码的哪些区域运行缓慢?
我想找出在 Linux 上用 C++ 编写的函数的执行时间。我发现了很多与此相关的帖子。我尝试了此链接计时器方法中提到的所有方法来计算时间。以下是我的函数的执行时间结果:
time() : 0 seconds
clock() : 0.01 seconds
gettimeofday() : 0.002869 seconds
rdtsc() : 0.00262336 seconds
clock_gettime() : 0.00672151 seconds
chrono : 0.002841 seconds
Run Code Online (Sandbox Code Playgroud)
请帮助我哪种方法的读数可靠,因为所有结果的读数都不同。我读到您的操作系统正在不同的任务之间切换,因此不能期望读数非常准确。有没有一种方法可以计算 CPU 在我的函数上花费的时间。我听说过分析工具的使用,但还没有找到任何函数的示例。请指导我。
当使用下面的基准代码编译时,-O3它在延迟方面的差异给我留下了深刻的印象,所以我开始怀疑编译器是否通过以某种方式删除代码而“作弊”。有没有办法检查?我可以安全地进行基准测试-O3吗?期望速度提高 15 倍是否现实?
没有的结果-O3:平均:239纳米最小:230 纳米(900 万次迭代) 有
结果-O3:平均:14纳米,最小:12 纳米(900 万次迭代)
int iterations = stoi(argv[1]);
int load = stoi(argv[2]);
long long x = 0;
for(int i = 0; i < iterations; i++) {
long start = get_nano_ts(); // START clock
for(int j = 0; j < load; j++) {
if (i % 4 == 0) {
x += (i % 4) * (i % 8);
} else {
x …Run Code Online (Sandbox Code Playgroud) 我愿意编写一个代码,让我的CPU执行一些操作,看看他花了多少时间来解决它们.我想做一个从i = 0到i <5000的循环,然后将i乘以一个常数和时间.我最终得到了这个代码,它没有错误,但即使我更改循环i <49058349083或者如果i <2它需要相同的时间,它只需要0.024秒来执行代码.是什么错误?
PD:我昨天开始学习C++我很抱歉,如果这是一个非常容易回答的问题,但我找不到解决方案
#include <iostream>
#include <ctime>
using namespace std;
int main () {
int start_s=clock();
int i;
for(i=0;i<5000;i++){
i*434243;
}
int stop_s=clock();
cout << "time: "<< (stop_s-start_s)/double(CLOCKS_PER_SEC)*1000;
return 0;
}
Run Code Online (Sandbox Code Playgroud) c++ ×4
optimization ×2
profiling ×2
benchmarking ×1
g++ ×1
linux ×1
performance ×1
unix ×1
x86 ×1