когда я получаю ядро, использующее слишком много регистров, я могу сделать 3 варианта:
- оставьте ядро без изменений, что приведет к низкой загрузке
- установить компилятор для использования меньшего количества регистров, разливая их, что ухудшает производительность
- переписать ядро
Для варианта 3 я хотел бы знать, какой части ядра требуется максимальное количество регистров. Есть ли какой-либо инструмент или метод, позволяющий мне идентифицировать эту часть? Чтение кода PTX (я разрабатываю на NVidia) бесполезно, регистры имеют различные большие числа и, честно говоря, лучшее, что я могу сделать, - это определить, какая часть кода сборки соответствует какой части кода C *. 1011 *
Просто комментировать некоторый код не так уж и много - например, я заметил, что если я просто помещаю код в цикл, число регистров резко возрастает, а не только на один для переменной управления циклом. Я лично подозреваю компилятор NVidia в несовершенном анализе живучести переменных, но, конечно, я не могу с этим многое сделать: -)