Nar*_*rek 14 c++ time benchmarking boost
可能重复:
C++定时器功能,以纳秒为单位提供时间
我需要以纳秒分辨率来测量函数执行的持续时间.可能吗?我们普通的计算机硬件和软件能够给出如此精确的时间吗?如果是,如何使用c ++实现这一目标?是否可以使用Boost库?
bam*_*s53 43
是的,今天大多数硬件都支持这种解决方案,而C++标准库也有一个支持它的API.不幸的是,并非C++的所有实现都提供了它.
API是<chrono>
C++ 11中引入的库:
#include <iostream>
#include <chrono>
int main() {
auto start = std::chrono::high_resolution_clock::now();
// operation to be timed ...
auto finish = std::chrono::high_resolution_clock::now();
std::cout << std::chrono::duration_cast<std::chrono::nanoseconds>(finish-start).count() << "ns\n";
}
Run Code Online (Sandbox Code Playgroud)
将<chrono>
在达尔文的libc ++实现提供纳秒级的分辨率,但它似乎在VS2012的实施只到毫秒的十分之一.上述代码仍将以纳秒为单位给出时间,但小于100微秒的时间将最终为零纳秒.
Boost还提供了一个实现,boost :: chrono,它似乎在Windows上使用纳秒.它也适用于C++ 03.
#include <boost/chrono.hpp>
int main() {
boost::chrono::high_resolution_clock::time_point t1 =
boost::chrono::high_resolution_clock::now();
boost::chrono::high_resolution_clock::time_point t2 =
boost::chrono::high_resolution_clock::now();
std::cout << boost::chrono::duration_cast<boost::chrono::nanoseconds>(t2-t1) << "\n";
// boost chrono has more advanced output, .count() isn't needed, nor is manually writing out the units
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
62256 次 |
最近记录: |