Как время выполнения ядра может увеличиться с лучшей загрузкой? - PullRequest
2 голосов
/ 29 февраля 2012

Ядро использует 54 регистра на поток с заполнением 0,33.Для отладки в нем есть оператор if:

if ( -1 == val ) // val is INT32
{
    printf( "Invalid value!\n" );
}

Если я закомментирую этот оператор if, ядро ​​использует 33 регистра на поток, а заполненность также увеличивается до 0,5.Но странная часть заключается в том, что это новое более компактное ядро ​​на самом деле занимает на 15% больше времени!Все остальные параметры кода и запуска (блоки, потоки) являются постоянными.Кто-нибудь может объяснить, как могло произойти это снижение производительности?

Я использую CUDA 4.0 на GTX 580, с кодом, скомпилированным с возможностью CUDA 2.0.

1 Ответ

1 голос
/ 01 марта 2012

Ashwin, Можете ли вы предоставить дополнительную информацию о вашем алгоритме, параметрах запуска, ... У Visual Profiler v4.1 и Parallel Nsight есть дополнительные метрики, которые могут помочь идентифицировать ваше узкое место.

Теоретическая занятость - этоабстрактное измерение того, насколько хорошо SM может скрывать задержку.Увеличение занятости выше определенной суммы может не улучшить производительность и может повлиять на производительность.Например, когда вы увеличиваете занятость, количество байтов / потоков L1 уменьшается.Один из элементов, на который стоит обратить внимание, - это скорость кеша.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...