фон:Сроки ядра cuda изнутри ядра?
У меня есть ядро, которое я измерить с окнами QPC (скорость клеща 264 наносекунд) в 4 мс. Но я дружеский спор с коллегой, работающим над моим ядром, который утверждает, что занимает 15 мс + (мы оба делаем это после разминки с Tesla K40). Я подозреваю, что его проблема связана с пользовательскими RHEL, пользовательскими драйверами cuda и его группами потоков в реальном времени, но я не эксперт по Linux. Я знаю, что оконные часы менее совершенны, но это слишком большое расхождение. (кроме того, все наши сроки других ядер, которые я написал, согласуются с его временем, это только первый в цепочке ядер, что время не согласуется). Меня пахнет чем-то вне ядра.
вопрос:
Во всяком случае есть способ с CudeDeviceEvents (прошедшее время), чтобы добавить к CUDA ядра для измерения полного времени ядра с момента, когда первый блок начинается с конца последнего блока? Я думаю, что это заставило нас начать выяснять, где проблема. Из моего чтения, похоже, что события cuda устройства выполняются на хосте, и я ищу что-то внутреннее для gpu.
Профилировщик CUDA должен быть в состоянии дать вам точную оценку времени выполнения чистого ядра. Для этого случая вы можете просто использовать минимальный профилировщик, встроенный в драйвер. Экспортируйте переменную среды 'CUDA_PROFILE = 1', запустите приложение, а затем просмотрите сгенерированный файл журнала. Обязательно отключите переменную среды профайлера, как только вы закончите с измерениями. – njuffa
Прежде чем погрузиться глубоко в профилировщик, вы можете сказать мне, что он внутренне выполняет (а) эмуляцию PTX, (b) статистическую выборку для синхронизации (c) вставки кода, которая выводит материал в журналы. Это три основных способа работы профилировщиков, но каждый из них имеет разное влияние на сроки, и в нашем случае мы не имеем дело с классической проблемой, связанной с вычислением, а с проблемой, связанной с данными, и будет иметь значение, каким образом дела идут. –
Я не знаю внутренних работ профилировщика, но это не (а). PTX представляет собой промежуточное представление кода. Он скомпилирован в машинный код (SASS), который выполняется на графическом процессоре. Профилировщик может рассказать вам о свойствах доступа к памяти в коде на основе счетчиков производительности HW. Существует несколько простых стратегий для ядер, связанных с памятью, руководство для лучшей практики должно быть хорошей отправной точкой. – njuffa