Изменение аргумента arch в CUDA заставляет меня использовать больше регистров

Я писал ядро ​​на моем Tesla K20m, когда я компилирую программное обеспечение с -Xptas=-v, я получаю следующие результаты:

ptxas info    : 0 bytes gmem
ptxas info    : Compiling entry function '_Z9searchKMPPciPhiPiS1_' for 'sm_10'
ptxas info    : Used 8 registers, 80 bytes smem, 8 bytes cmem[1]

как вы можете видеть, используются только 8 регистров, однако, если я упомяну аргумент -arch=sm_35, время, когда мое ядро ​​выполняется, резко возрастает, и количество используемых регистров тоже, и мне интересно, почему

nvcc mysoftware.cu -Xptxas=-v -arch=sm_35 
ptxas info    : 0 bytes gmem
ptxas info    : Compiling entry function '_Z9searchKMPPciPhiPiS1_' for 'sm_35'
ptxas info    : Function properties for _Z9searchKMPPciPhiPiS1_
0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 21 registers, 16 bytes smem, 368 bytes cmem[0]

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

Благодарю.

Редактировать: похожие вопросы и ответы: регистры и разделяемая память в зависимости от возможностей компиляции?

1 ответ

Решение

Компиляция с sm_20 и выше обеспечивает соответствие IEEE по математике и ABI. Эти две опции могут увеличить количество регистров и снизить производительность. Эти две опции могут быть отключены.

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