Кто-нибудь имеет опыт анализа производительности приложений CUDA с использованием нулевой копии (ссылка здесь: Закрепленная по умолчанию память против памяти с нулевым копированием) модель памяти?
У меня есть ядро, которое использует функцию нулевого копирования, и с NVVP я вижу следующее:
При работе ядра со средним размером проблемы накладные расходы на воспроизведение инструкций составляют 0,7%, поэтому ничего особенного. И все эти 0,7% являются глобальными затратами на воспроизведение памяти.
Когда я действительно увеличиваю размер проблемы, я получаю накладные расходы при воспроизведении инструкций в размере 95,7%, и все это из-за глобальных накладных расходов при воспроизведении памяти.
Тем не менее, глобальная эффективность загрузки и эффективность глобального хранилища как для ядра с нормальным размером проблемы, так и для ядра с очень большим размером проблемы одинаковы. Я не совсем уверен, что делать с этой комбинацией метрик.
Главное, в чем я не уверен — какая статистика в NVVP поможет мне увидеть, что происходит с функцией нулевого копирования. Любые идеи о том, какой тип статистики я должен смотреть?
Графические процессоры Fermi и Kepler должны воспроизводить инструкции памяти по нескольким причинам:
Задержка до
Затраты на воспроизведение возрастают из-за увеличения пропусков и конкуренции за ресурсы LSU из-за увеличенной задержки.
Глобальная эффективность загрузки не увеличивается, поскольку она представляет собой отношение идеального объема данных, который должен быть передан для выполняемых инструкций памяти, к фактическому количеству передаваемых данных. Идеально означает, что исполняемые потоки обращались к последовательным элементам в памяти, начиная с границы строки кэша (32-разрядная операция — 1 строка кэша, 64-разрядная операция — 2 строки кэша, 128-разрядная операция — 4 строки кэша). Доступ к нулевой копии медленнее и менее эффективен, но не увеличивает и не изменяет объем передаваемых данных.
Профилировщик выставляет следующие счетчики:
В случае нулевой копии все эти показатели должны быть намного ниже.
Эксперименты с памятью Nsight VSE CUDA Profiler покажут объем данных, к которым осуществляется доступ через PCIe (нулевая копия памяти).
Других решений пока нет …