Архитектура NVIDIA оптимизировала пропускную способность памяти, выдав инструкцию для группы потоков, называемую деформацией. Если каждый поток обращается к последовательному элементу данных или к одному и тому же элементу, то доступ может быть выполнен очень эффективно. Однако если каждый поток обращается к данным в другой строке кэша или по другому адресу в том же банке, возникает конфликт, и инструкция должна быть воспроизведена повторно.
inst_executed — количество удаленных инструкций. inst_issued — количество выданных инструкций. Инструкция может быть выдана несколько раз в случае доступа к векторной памяти, конфликта адресов памяти, конфликта банков памяти и т. д. При каждой проблеме маска потока уменьшается до тех пор, пока все потоки не будут завершены.
Различие проводится по двум причинам: 1. Удаление инструкции указывает на завершение зависимости данных. Зависимость данных разрешается только 1 раз, несмотря на возможные повторы. 2. Соотношение между выданными и выполненными — это простой способ показать возможности экономии циклов выдачи деформирующего планировщика.
В Fermi и Kepler SM, если возникал конфликт памяти, инструкция воспроизводилась (повторно выдавалась) до тех пор, пока не завершались все потоки. Это было выполнено планировщиком деформации. Эти повторы потребляют циклы задач, уменьшая способность SM выдавать инструкции математическим каналам. В этом SM выданное > выполненное указывает на возможность оптимизации, особенно если выданное IPC высокое.
В Maxwell-Turing SM повторы для доступа к вектору, конфликты адресов и конфликты памяти воспроизводятся блоком памяти (общая память, L1 и т. д.) и не крадут циклы выпуска планировщика деформации. В этом SM выпускается очень редко более чем на несколько % выше выполненного.
ПРИМЕР: ядро загружает 32-битное значение. Все 32 потока в варпе активны, и каждый поток обращается к уникальной строке кэша (шаг = 128 байт).
На Kepler (CC3.*) SM инструкция выдается 1 раз, а затем воспроизводится еще 31 раз, поскольку Kepler L1 может выполнять только 1 поиск тега на запрос.
inst_executed = 1 inst_issued = 32
На Kepler инструкцию приходится повторять заново для каждого запроса, пропущенного в L1. Если все потоки отсутствуют в кеше L1, то
inst_executed = 1 inst_issued >= 64 = 32 запроса + 32 повтора за промахи
В архитектуре Максвелла-Тьюринга воспроизведение выполняется системой памяти SM. Повторы могут ограничивать пропускную способность памяти, но не блокируют планировщик деформации от выдачи инструкций математическому конвейеру.
inst_executed = 1 inst_issued = 1
В Maxwell-Turing Nsight Compute/Perfworks выставляют счетчики пропускной способности для каждого из конвейеров памяти, включая количество циклов из-за конфликтов банков памяти, сериализации атомарных элементов, расхождения адресов и т. д.
person
Greg Smith
schedule
15.08.2019