CUDA закрепила память и слилась

На устройстве с вычислительными возможностями 2.x как мне убедиться, что gpu использует объединенный доступ к памяти при использовании сопоставленной закрепленной памяти и при условии, что обычно при использовании глобальной памяти 2D-данные требуют заполнения?

Кажется, я нигде не могу найти информацию об этом, возможно, я должен выглядеть лучше или, возможно, я что-то упускаю. Любые указатели в правильном направлении приветствуются...

1 ответ

Коалесцирующий подход должен применяться при использовании нулевой копии памяти. Цитируя руководство по лучшей практике CUDA C:

Поскольку данные не кэшируются в графическом процессоре, отображенная закрепленная память должна считываться или записываться только один раз, а глобальные загрузки и хранилища, которые читают и записывают память, должны объединяться.

Цитирую книгу С. Кука "Программирование CUDA"

Если вы подумаете о том, что происходит с доступом к глобальной памяти, из памяти компьютера Compute 2.x извлекается целая строка кэша. Даже на оборудовании 1.x те же 128 байтов, которые могут быть уменьшены до 64 или 32, извлекаются из глобальной памяти. NVIDIA не публикует информацию о размере передачи PCI-E, которую он использует, или подробности о том, как фактически реализовано нулевое копирование. Тем не менее, подход коалесцирования, используемый для глобальной памяти, может быть использован с передачей PCI-E. Модель скрытия задержки деформируемой памяти может в равной степени применяться к передачам PCI-E, при условии, что существует достаточная арифметическая плотность, чтобы скрыть задержку передач PCI-E.

Другие вопросы по тегам