вопрос таймера - PullRequest
       19

вопрос таймера

1 голос
/ 27 октября 2010

говорят, что я хочу синхронизировать выборку памяти из глобальной памяти устройства

cudaMemcpy(...cudaMemcpyHostToDevice);
cudaThreadSynchronize();
time1 ...

kernel_call();
cudaThreadSynchronize();
time2 ...

cudaMemcpy(...cudaMemcpyDeviceToHost);
cudaThreadSynchronize();
time3 ...

Я не понимаю, почему мои time3 и time2 всегда дают одинаковые результаты.Моему ядру требуется много времени, чтобы подготовить результат к извлечению, но не должен ли cudaThreadSynchronize () заблокировать всю операцию до того, как будет выполнен kernel_call?Также загрузка из памяти устройства в память хоста также должна занять некоторое время, по крайней мере, заметное.Благодарю.

Ответы [ 2 ]

3 голосов
/ 30 октября 2010

Лучший способ контролировать время выполнения - использовать переменную среды CUDA_PROFILE_LOG = 1 и установить в файле CUDA_PROFILE_CONFIG значения timestamp, gpustarttimestamp, gpuendtimestamp.после запуска вашей программы cuda с этими переменными среды должен быть создан локальный файл .cuda_log, который должен быть указан во временных значениях memcopies и выполнения ядра до микросекундного уровня.чистый и не агрессивный.

1 голос
/ 04 ноября 2010

Я не знаю, здесь ли это критическая точка, но я заметил следующее:

если вы посмотрите примеры кода nvidia (не знаете, где именно), вы обнаружите что-то вроде функции «разогрева», которая вызывается перед тем, как вызывается какое-то критическое ядро, которое должно измеряться.

Почему?

Поскольку драйвер nvidia будет динамически оптимизировать искусство управления процессором во время первого доступа (в вашем случае до timer1) каждый раз при выполнении программы. Будет много служебных данных. Это было не ясно для меня в течение длительного времени. Когда я сделал 10 пробежек, первая пробежка была оооочень бездарной. Теперь я знаю почему.

Решение: просто используйте фиктивную / разогревающую функцию, которая обращается к оборудованию GPU до начала реального выполнения вашего кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...