У меня есть две реализации функции, и я хотел бы увидеть, какая из них быстрее. Назовите их foo1()
и foo2()
. У меня есть набор тестовых случаев, которые я хотел бы запустить против них обоих. Тестовые случаи хранятся в массиве, и я не хочу включать время, затраченное на доступ к массиву. Вот мой код Он не компилируется на duration += std::chrono::duration_cast<std::chrono::microseconds>( t2 - t1 )
с сообщением об ошибке error: no match for 'operator<<' (operand types are 'std::basic_ostream<char>' and 'std::chrono::microseconds' {aka 'std::chrono::duration<long long int, std::ratio<1, 1000000> >'})
52 | std::cout << "duration: " << duration << std::endl;
.
Код:
/*[first argument, second argument, correct result]*/
int inout[5][3] = {
{10, 4, 5},
{21, 4, 6},
{22, 4, 7},
{50, 5, 19},
{100, 5, 7},
//just example, real one is longer
};
std::chrono::microseconds duration = std::chrono::microseconds::zero();
for(auto& i : inout)
{
auto t1 = std::chrono::high_resolution_clock::now();
foo1(i[0], i[1]);
auto t2 = std::chrono::high_resolution_clock::now();
duration += std::chrono::duration_cast<std::chrono::microseconds>( t2 - t1 ).count();//this won't compile
}
std::cout << "duration of foo1(): " << duration << std::endl;
duration = std::chrono::microseconds::zero();
for(auto& i : inout)
{
auto t1 = std::chrono::high_resolution_clock::now();
foo2(i[0], i[1]);
auto t2 = std::chrono::high_resolution_clock::now();
duration += std::chrono::duration_cast<std::chrono::microseconds>( t2 - t1 ).count();//this won't compile
}
std::cout << "duration of foo2(): " << duration << std::endl;
Есть какие-нибудь предложения по чему-либо здесь? Я подумал, что было бы более целесообразно проверить скорость на предмет отсутствия кеша, поэтому должны ли чередоваться вызовы foo1()
и foo2()
? OTOH цель состоит в том, чтобы увидеть, какой из них быстрее, и оба извлекут выгоду из кеша, однако более крупный, вероятно, будет иметь больше пропусков кеша. Также из любопытства, какой тип на auto& i
в foreach l oop?