Правильный способ ведения журнала прошедшего времени в C ++ - PullRequest
4 голосов
/ 14 мая 2011

Я пишу статью об ускорении работы графического процессора в кластерной среде.
Для этого я программирую на CUDA, который в основном является расширением c ++.Но, как разработчик ac #, я не знаю особенностей c ++.

Есть ли какие-то опасения по поводу регистрации прошедшего времени?Некоторое предложение или блог для чтения.

Моя первоначальная идея - сделать большой цикл и запустить программу несколько раз.50 ~ 100, и регистрируйте каждое прошедшее время, чтобы сделать графики скорости.

Ответы [ 3 ]

4 голосов
/ 14 мая 2011

В зависимости от ваших потребностей, это может быть так просто, как:

time_t start = time(NULL);
// long running process
printf("time elapsed: %d\n", (time(NULL) - start));

Я думаю, вам нужно указать, как вы планируете это регистрировать (файл или консоль) и с какой точностью вам нужно (секунд, мс, нас и т. д.).«время» дает его в секундах.

3 голосов
/ 14 мая 2011

Я бы порекомендовал использовать библиотеку таймера повышения .Он не зависит от платформы и прост:

#include <boost/timer/timer.hpp>
boost::timer t;
// do some stuff, up until when you want to start timing
t.restart();
// do the stuff you want to time.
std::cout << t.elapsed() << std::endl;

Конечно, t.elapsed () возвращает значение типа double, которое вы можете сохранить в переменной.

2 голосов
/ 14 мая 2011

Стандартные функции, такие как time, часто имеют очень низкое разрешение. И да, хороший способ обойти это - многократно выполнить тест и набрать среднее значение. Обратите внимание, что первые несколько раз могут быть очень медленными из-за скрытых затрат на запуск - особенно при использовании сложных ресурсов, таких как графические процессоры.

Для вызовов, специфичных для платформы, посмотрите QueryPerformanceCounter в Windows и CFAbsoluteTimeGetCurrent в OS X. (Я не использовал вызов POSIX clock_gettime, но это может стоить проверить.)

Измерение производительности графического процессора сложно, поскольку графические процессоры являются удаленными процессорами, выполняющими отдельные инструкции - часто на многих параллельных блоках. Возможно, вы захотите посетить CUDA Zone Nvidia , где вы найдете различные ресурсы и инструменты, которые помогут измерить и оптимизировать код CUDA. (Ресурсы, связанные с OpenCL , также очень актуальны.)

В конечном счете, вы хотите увидеть, как быстро ваши результаты попадают на экран, верно? По этой причине звонка на номер time вполне может быть достаточно для ваших нужд.

...