я делаю некоторые тривиальные бенчмаркинг написания х строк одного и того же текста в файл, используя два метода:Измерение максимального и минимального времени выполнения определенной функции
Прямая FWRITE.
Создать новую тему, и связь осуществляется через асинхронную очередь (основной поток вставляется с одной стороны, а другой поток считывается с другой). Этот метод используется, чтобы попытаться свести к минимуму медленной записи (из-за смыв)
Это фрагмент кода, который должен дать общее представление о программе:
int i;
char * buf;
int buf_size;
double local_start, local_end, global_start, global_end;
double slowest, fastest;
double local_time_difference;
buf = "A string to be printed to a file \n";
buf_size = strlen(buf);
fastest = MAX_WRITE_TIME;
slowest = 0;
logger_init(atoi(argv[1]));
global_start = get_time();
for(i = 0 ; i < 100000000 ; i++)
{
local_start = get_time();
logger_write(buf, buf_size);
local_end = get_time();
local_time_difference = local_end-local_start;
if(local_time_difference < fastest && local_time_difference != 0)
fastest = local_time_difference;
if(local_time_difference > slowest)
slowest = local_time_difference;
if(i % 10000 == 0)
usleep(1);
}
global_end = get_time();
printf("Fastest: %1.9f\nSlowest: %1.9f\nTotal Time: %1.9f\n", fastest, slowest, global_end-global_start);
logger_destroy();
Получить процедуру времени возвращения время в микросекундах
double get_time()
{
struct timeval t;
struct timezone tzp;
gettimeofday(&t, &tzp);
return t.tv_sec + t.tv_usec*1e-6;
}
в зависимости от аргумента, переданного logger_init, logger_write либо непосредственно записать в файл или вставить его в очередь (размер очереди не должно превышать сома особый предел). GAsyncQueue Используется
Метод, который я использую для вычисления самой быстрой и медленной записи, безусловно, работает, но мой вопрос: есть ли инструмент или профайлер, который сделает это для меня? т.е. дать мне статистику о каждой функции (максимум, минимум и средний вызов)
Инструменты, которые я пытался до сих пор, но не везло с:
- дргоЕ
- Увеличить
- KCacheGrind
- VTune
TL: DR Я вот oking для инструмента, чтобы дать мне минимальное, максимальное и среднее время выполнения определенной функции, а не общее время.
Вы можете получить более точную точность с функцией времени с более высоким разрешением, например clock_gettime (при условии, что linux) или QueryPerformanceCounter на окнах – mathematician1975