Как транзакции L2 сопоставляются с DRAM в графических процессорах?


В графических процессорах транзакции в кэш L2 могут иметь размер 32B, 64B или 128B (как для чтения, так и для записи). А общее количество таких транзакций можно измерить с помощью метрик nvprof, таких как gst_transactions и gld_transactions. Однако я не могу найти никаких материалов, которые подробно описывали бы, как эти транзакции сопоставляются для доступа DRAM, т. е. как эти транзакции обрабатываются DRAM, который обычно имеет другую ширину шины? Например, графический процессор TitanXp имеет 384-битную глобальную шину памяти и P100 имеет 3072-битную шину памяти. Итак, как 32B, 64B или 128B инструкции сопоставляются с этими шинами памяти. И как я могу измерить количество транзакций, генерируемых контроллером DRAM?

PS: метрика dram_read_transactions, похоже, не делает этого. Я говорю это, потому что я получаю одно и то же значение для dram_read_transactions на TitanXp и P100 (даже при последовательном доступе), несмотря на то, что они имеют совершенно разные ширины шины.

1 3

1 ответ:

Хотя GPU DRAM может иметь различную (аппаратную) ширину шины для разных типов GPU, шина всегда состоит из набора разделов, каждый из которых имеет эффективную ширину 32 байта. Транзакция DRAM с точки зрения профилировщика фактически состоит из одной из этих 32-байтовых транзакций, а не транзакции с полной "шириной шины".

Поэтому (единственная) 32-байтовая транзакция в L2, если она отсутствует в L2, преобразуется в одну 32-байтовую транзакцию DRAM. Сделки высшего уровня детализация, например 64-байтовая или 128-байтовая, преобразуется в необходимое число 32-байтовых транзакций DRAM. Это можно обнаружить с помощью любого из профилировщиков CUDA.

Эти связанные вопросы здесь и здесь также могут представлять интерес.

Обратите внимание, что "эффективная ширина" 32 байта, как указано выше, не обязательно означает, что транзакция требует 32bytes * 8bits/byte = 256 bit wide interface. Шины DRAM могут быть "двухкачанными" или "четырехкачанными", которые означает, что транзакция может состоять из нескольких битов, передаваемых по "проводу" интерфейса. Поэтому вы найдете графические процессоры, которые имеют только 128-битный (или даже 64-битный) интерфейс к GPU DRAM, но "транзакция" на этих шинах все равно будет состоять из 32 байт, что потребует передачи нескольких битов (вероятно, в нескольких тактах шины DRAM) на "провод" интерфейса.