Когда ваша программа запускается, в main () используйте любой системный таймер для записи времени.Когда ваша программа заканчивается в нижней части main (), используйте тот же системный таймер для записи времени.Возьмите разницу между временем2 и временем1.Вот и все!
Существуют различные системные таймеры, которые вы можете использовать, некоторые с более высоким разрешением, чем другие.Вместо того чтобы обсуждать их здесь, я бы предложил вам поискать «системный таймер» на SO-сайте.Если вам нужен какой-либо системный таймер, gettimeofday () работает в системах Linux, но он был заменен более новыми, более точными функциями.Таким образом, gettimeofday () измеряет только время в микросекундах, которое должно быть достаточно для ваших нужд.
Если вы не можете получить таймер с достаточно хорошим разрешением, рассмотрите возможность многократного запуска вашей программы в цикле,хронометраж выполнения цикла и деление измеренного времени на количество итераций цикла.
РЕДАКТИРОВАТЬ:
Системные таймеры могут использоваться для измерения общей производительности приложения, включая время, используемое во время графического процессорарасчет.Обратите внимание, что использование системных таймеров таким образом относится только к реальному или настенному времени, а не к процессу.Измерения, основанные на времени настенных часов, должны включать время, затраченное на ожидание завершения операций графического процессора.
Если вы хотите измерить время, затраченное ядром графического процессора, у вас есть несколько вариантов.Во-первых, вы можете использовать Compute Visual Profiler для сбора различной информации о профилировании, и хотя я не уверен, что он сообщает время, он должен это делать (это базовая функция профилирования).Другие профилировщики - на ум приходит PAPI - предлагают поддержку ядер CUDA.
Другой вариант - использовать события CUDA для записи времени.Пожалуйста, обратитесь к Руководству по программированию CUDA 4.0, где обсуждается использование событий CUDA для измерения времени.
Еще один вариант - использовать системные таймеры, обернутые вокруг вызовов ядра GPU.Обратите внимание, что, учитывая асинхронный характер возвратов вызовов ядра, вам также нужно будет выполнить вызов ядра с помощью вызова синхронизации GPU на стороне хоста, такого как cudaThreadSynchronize (), чтобы этот метод был применим.Если вы выберете эту опцию, я настоятельно рекомендую вызывать ядро в цикле, синхронизируя цикл + одну синхронизацию в конце (поскольку синхронизация происходит между вызовами ядра, не выполняющимися в разных потоках, cudaThreadSynchronize () не требуется внутри цикла),и деление на количество итераций.