Как вы вычисляете время (в MS) выполнения части кода в C++?Время выполнения части кода в C++
ответ
О лучшем, что вы можете сделать в переносном коде, - это время с clock()
.
clock_t start = clock();
// code to time goes here
clock_t stop = clock();
double seconds = double(stop-start)/CLOCKS_PER_SEC;
C++ 11 добавляет новый заголовок с именем <chrono>
с классами для time_point
и duration
, которые могут сделать работу проще и чище. Однако ни одно из них не гарантирует точность на миллисекундах (или даже точность). Новые классы имеют typedefs для продолжительности вплоть до наносекундного диапазона, но не гарантируют, будут ли ваши реальные результаты такими точными или нет (но с большинством типичных ОС, я уверен, что ответ обычно «не»).
Я бы не сидел «лучше». Вам будет лучше «# ifdef» в отношении конкретных функций ОС, так как «clock()» может иметь довольно низкое разрешение. –
'# ifdef. Функции, специфичные для ОС, (по определению) не являются переносимым кодом. Разрешение 'clock' меняется, но, конечно, * может быть довольно низким. Для портативного кода это все равно самое лучшее, что вы можете сделать. Они на самом деле не предназначены для этой цели, но могут быть применены к этому использованию в любом случае. –
Хорошо, но на практике это приводит к созданию кода, который отлично работает и имеет лучшую возможность измерять небольшие промежутки времени. Но да, это не технически переносимо, поскольку оно нестандартно. –
Большинство систем поддерживают высокопроизводительный механизм синхронизации. В Windows вы можете использовать таймер API высокой производительности:
В * NIX системах вы можете использовать clock_getres() and clock_gettime()
.
Вы должны быть в состоянии выяснить, как использовать их вовремя для вашего кода.
Вот что я использую для C++ (не 11), но многие библиотеки могут иметь более сложные решения. Для кода вам нужен Qt, но его можно легко обойти. Возможно, вам также потребуется заменить CLOCK_MONOTONIC в зависимости от вашей операционной системы.
#ifndef PROFILER_H
#define PROFILER_H
#include <sys/time.h>
#include <QString>
class Profiler
{
public:
Profiler(QString const& name);
long measure() const;
long measureNs() const;
double measureMs() const;
double measureS() const;
void printNs() const;
void printMs() const;
void printS() const;
private:
QString mName;
timespec mTime;
};
#endif // PROFILER_H
#include "profiler.h"
#include <QDebug>
#include <assert.h>
#include <iostream>
Profiler::Profiler(QString const& name):mName(name){
clock_gettime(CLOCK_MONOTONIC, &mTime); // Works on Linux
}
long int Profiler::measureNs() const{
timespec end;
clock_gettime(CLOCK_MONOTONIC, &end); // Works on Linux
long int diff = (end.tv_sec-mTime.tv_sec) * 1000000000 + (end.tv_nsec - mTime.tv_nsec);
assert(diff>0);
return diff;
}
double Profiler::measureMs() const{
return measureNs()/1000000.0;
}
double Profiler::measureS() const{
return measureMs()/1000.0;
}
void Profiler::printNs() const{
qDebug() << mName << "Time elapsed:" << measureNs() << "ns";
}
void Profiler::printMs() const{
qDebug() << mName << "Time elapsed:" << measureMs() << "ms";
}
void Profiler::printS() const{
qDebug() << mName << "Time elapsed:" << measureS() << "S";
}
Использование:
Profiler pro("Tag you want");
function();
pro.printMs();
- 1. C# Размер кода и время выполнения кода
- 2. Получить время выполнения куска кода
- 3. Как найти время выполнения кода в C?
- 4. минимизировать время выполнения или время выполнения кода
- 5. Сокращение времени выполнения части кода в Matlab?
- 6. Вычислить время выполнения кода программы C?
- 7. Скомпилировать расширение кода C# во время выполнения
- 8. время выполнения в C++
- 9. Как измерить время выполнения C кода?
- 10. requestAnimationFrame время выполнения кода
- 11. Время выполнения кода SAS
- 12. уменьшить время выполнения кода
- 13. Время выполнения кода измерения
- 14. улучшение скорости выполнения этой части кода
- 15. время выполнения кода блока
- 16. Время выполнения кода сортировки
- 17. Измерьте время выполнения в C#
- 18. Каково время выполнения следующего кода?
- 19. Время работы процессора части кода
- 20. Изменение кода во время выполнения
- 21. Понимание части кода C#
- 22. Изменение части зрения во время выполнения
- 23. время выполнения в C#?
- 24. Время выполнения Inlining в C#?
- 25. Изменение кода выполнения функции во время выполнения
- 26. Ошибка выполнения кода (C++)
- 27. java- время выполнения блока кода
- 28. Компиляция и время выполнения исходного кода C++ vs C
- 29. Время выполнения кода на микроконтроллере
- 30. Уменьшить время выполнения кода pandas
Либо использовать профайлер или вставить вызовы функции таймера до/после секции кода интереса. –
-1 за отсутствие исследовательских усилий. –
'' отлично работает, если у вас есть C++ 11. Это может быть немного сложно понять, если вы никогда не использовали его, но это не плохо, как только вы пойдете. –
chris