#include <iostream>
#include <chrono>
#include <cmath>
#include <ctime>
#include <cstdlib>
template <class Counter, class Function, class... Args>
inline double benchmark(const Counter& counter, Function&& f, Args&&... args)
{
const std::chrono::high_resolution_clock::time_point marker
= std::chrono::high_resolution_clock::now();
for (Counter i = Counter(); i < counter; ++i) {
f(args...);
}
return std::chrono::duration_cast<std::chrono::duration<double> >
(std::chrono::high_resolution_clock::now()-marker).count();
}
int main(int argc, char* argv[])
{
srand(time(nullptr));
double y = rand()%10+1;
std::cout<<benchmark(1000000, [](double x){return std::sin(x);}, y)<<"\n";
return 0;
}
功能benchmark
測量功能的執行時間。問題是函數在優化過程中被作爲空語句擦除。有沒有辦法強制該功能真正執行?
編輯: 1)我尋找在一個標準的C的溶液++(無特定編譯器指令) 2)這將是更好的,如果f
能(保持儘可能通用例如void返回類型)
LWS代碼未發佈 – 2013-03-16 03:15:53
謝謝,現在發佈 – Vincent 2013-03-16 03:17:13
標準中有很多verbage說C++編譯器可以自由刪除副作用的免費代碼......但是,許多編譯器不好看到副作用編譯單元之間的自由度(即鏈接時間優化)。這可能是一種解決問題的方法。 – Yakk 2013-03-16 03:48:17