Хорошо, Итак, я делаю некоторые вычисления на CPU, а затем передаю числа на GPU и выполняю там какую-то работу. Я хочу рассчитать общее время, затраченное на вычисления на CPU + графический процессор. как я это делаю?Как вычислить общее время для CPU + GPU
ответ
Когда ваша программа запускается в main(), используйте любой системный таймер для записи времени. Когда ваша программа заканчивается в нижней части main(), используйте тот же системный таймер для записи времени. Возьмите разницу между time2 и time1. Вот так!
Существуют различные системные таймеры, которые вы можете использовать, некоторые с более высоким разрешением, чем другие. Вместо того, чтобы обсуждать их здесь, я предлагаю вам искать «системный таймер» на сайте SO. Если вам нужен только системный таймер, gettimeofday() работает в системах Linux, но он заменяется более новыми функциями с более высокой точностью. Как бы то ни было, gettimeofday() измеряет только время в микросекундах, которое должно быть достаточным для ваших нужд.
Если вы не можете получить таймер с достаточным разрешением, подумайте о том, чтобы запустить программу в цикле много раз, синхронизировать выполнение цикла и делить измеренное время на число итераций цикла.
EDIT:
Системные таймеры могут быть использованы для измерения общей производительности приложений, в том числе время, используемое при расчете на GPU. Обратите внимание, что использование системных таймеров таким образом применимо только к реальному или настенным часам, а не по времени обработки. Измерения, основанные на времени настенных часов, должны включать время, ожидаемое для завершения операций GPU.
Если вы хотите измерить время, затрачиваемое ядром GPU, у вас есть несколько вариантов. Во-первых, вы можете использовать Compute Visual Profiler для сбора разнообразных профилирующих данных, и хотя я не уверен, что он сообщает время, он должен иметь возможность (это базовая функция профилирования). Другие профилировщики - PAPI приходят на ум - предлагают поддержку ядер CUDA.
Другой вариант - использовать события CUDA для записи времени. Пожалуйста, обратитесь к руководству по программированию CUDA 4.0, где обсуждается использование событий CUDA для измерения времени.
Еще один вариант - использовать системные таймеры, завернутые в вызовы ядра GPU. Обратите внимание, что, учитывая асинхронный характер обращения к ядру, вам также необходимо будет следить за вызовом ядра с помощью вызова синхронизации на стороне хоста, такого как cudaThreadSynchronize(), чтобы этот метод применим. Если вы перейдете к этой опции, я настоятельно рекомендую вызывать ядро в цикле, синхронизируя цикл + одну синхронизацию в конце (поскольку синхронизация происходит между вызовами ядра, не выполняющимися в разных потоках, cudaThreadSynchronize() не требуется внутри цикла), и деление на количество итераций.
Таймер C перемещается независимо от того, работает ли GPU или нет. Если вы не верите мне, сделайте этот небольшой эксперимент: Сделайте для цикла с 1000 итерациями по сравнению с GPU_Function_Call. Поместите любой таймер C вокруг этого цикла. Теперь, когда вы запускаете программу (предположим, что функция GPU занимает значительное время, например, 20 мс), вы увидите, что она работает в течение нескольких секунд невооруженным глазом, прежде чем она вернется. Но когда вы печатаете время C, вы заметите, что он покажет вам, как несколько миллисекунд. Это связано с тем, что таймер C не дождался 1000 вызовов MemcpyHtoD и 1000 MemcpyfromDtoH и 1000 ячеек ядра.
Что я предлагаю использовать CUDA таймер событий или даже лучше NVIDIA Визуальная Profiler к времени GPU и использование секундомера (увеличение итераций, чтобы уменьшить человеческие ошибки) для измерения полного времени. Затем просто вычитайте время GPU из общего количества, чтобы получить время процессора.
Ваш первый пункт не является строгим. Да, запуски ядра асинхронны, но стандартный API mempcpy блокируется, поэтому таймер хоста записывает правильное время настенных часов. – talonmies
- 1. Как вычислить общее время
- 2. CacheSQL вычислить общее время
- 3. CPU обгоняет GPU
- 4. измерение времени общее время vs время cpu
- 5. Добавление времени, вычислить общее время
- 6. CUDA GPU медленнее, чем CPU
- 7. GPU + CPU Tensorflow Обучение
- 8. GPU читает от CPU или CPU записывает на GPU?
- 9. CPU SIMD vs GPU SIMD?
- 10. Как вычислить общее время для каждого цикла в jQuery?
- 11. GPU сортировки против CPU сортировочного
- 12. CUDA же функция для CPU и GPU
- 13. WebGL CPU против GPU для преобразований
- 14. Как использовать вычисления gpu и cpu одновременно?
- 15. Копирование данных с GPU на CPU
- 16. wglGetCurrentContext синхронизирует GPU и CPU?
- 17. Как визуализировать на GPU вместо CPU? -Java-
- 18. Как объединить CPU и GPU в JavaCL?
- 19. CPU против GPU для вычисления (conv) Neural Networks
- 20. Вычислить CPU за процесс
- 21. Синхронизация таймера OpenGL и CPU/GPU
- 22. Можно ли вычислить нормали в gpu?
- 23. MPI-2 на CPU против GPU
- 24. Поиск минимума в GPU медленнее, чем CPU
- 25. Получите общее количество памяти GPU?
- 26. Общее использование CPU - многоядерный система
- 27. Вычислить общее время, исключая перекрывающиеся время и перерывы в MySQL
- 28. Как вычислить общее количество свинья?
- 29. ScriptDb: как вычислить общее поле
- 30. Время измерения на GPU
Эти системные таймеры также учитывают время, затрачиваемое на вычисление на графическом процессоре? Я так не думаю ... Между, я хочу, чтобы время раздела кода. Таким образом, просто ввод в начало основного не помогает – Programmer
@Programmer Пожалуйста, проверьте мои изменения. – Patrick87