我目前正在进行一个科学计算项目,涉及海量数据和复杂算法,因此需要进行大量代码分析。我目前依靠的是<ctime>
and clock_t
来计算我的代码的执行时间。我对这个解决方案非常满意......除了我基本上对所有事情进行计时,因此对于我必须调用的每一行真实代码start_time_function123 = clock()
, end_time_function123 = clock()
and cout << "function123 execution time: " << (end_time_function123-start_time_function123) / CLOCKS_PER_SEC << endl
。这会导致代码严重膨胀,并很快使我的代码变得不可读。你会如何处理这个问题?
我能想到的唯一解决方案是找到一个 IDE,允许我标记部分代码(在不同位置,甚至在不同文件中),并通过一个按钮切换隐藏/显示所有标记的代码。这将使我能够在大部分时间隐藏与分析相关的代码部分,并仅在需要时才显示它。
具有将代码标记为定时的 RAII 类型。
struct timed {
char const* name;
clock_t start;
timed( char const* name_to_record):
name(name_to_record),
start(clock())
{}
~timed(){
auto end=clock();
std::cout << name << " execution time: " << (end-start) / CLOCKS_PER_SEC << std::endl;
}
};
使用它:
void foo(){
timed timer(__func__);
// code
}
噪音小得多。
您可以使用非基于范围的完成操作进行增强。有时,在进行大量分析时,我喜欢包含唯一的 ID。将 cout 与 endl 一起使用可能会导致它主宰时序;快速记录到以异步方式转储的大缓冲区可能是最佳选择。如果你需要计算毫秒级的时间,甚至应该避免分配、锁定和字符串操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)