CUDA - ограничение количества используемых SM - PullRequest
4 голосов
/ 26 ноября 2011

Можно ли как-то ЯВНО ограничить количество мультипроцессоров GPU, используемых во время выполнения моей программы?Я хотел бы посчитать, как мой алгоритм расширяется с ростом числа многопроцессорных систем.

Если это поможет: я использую CUDA 4.0 и устройство с вычислительными возможностями 2.0.

1 Ответ

1 голос
/ 27 ноября 2011

Ааааа ... Я знаю проблему. Я сам играл с ним, когда писал статью.

Нет явного способа сделать это, однако вы можете попробовать «взломать» его, если некоторые блоки ничего не делают.

  • если вы никогда не запускаете больше блоков, поскольку есть мультипроцессоры, тогда ваша работа проста - просто запустите еще меньше блоков. Некоторые из SM гарантированно не будут работать, потому что блок не может быть разделен на несколько SM.
  • если вы запускаете гораздо больше блоков и просто полагаетесь на драйвер для их планирования, используйте другой подход: просто запустите столько блоков, сколько может обработать ваш графический процессор, и если один из блоков завершит свою работу, вместо его завершения, вернитесь назад к началу и выберите другой фрагмент данных для работы. Скорее всего, производительность вашей программы не упадет; может быть даже лучше, если вы тщательно спланируете свою работу :)
  • Самая большая проблема - это когда все ваши блоки работают на GPU одновременно, но у вас более одного блока на SM. Затем вам нужно запустить нормально, но вручную «отключить» некоторые блоки и приказать другим блокам выполнить работу за них. Проблема в том, какие блоки отключить, чтобы гарантировать, что один SM работает, а другой - нет.

Из моих собственных экспериментов устройства 1.3 (у меня был GTX 285) планируют блоки в последовательности. Таким образом, если я запускаю 60 блоков на 30 SM, блоки 1-30 планируются на SM 1-30, а затем 31-60 снова на SM от 1 до 30. Таким образом, отключая блоки 5 и 35, SM номер 5 практически не делать что-либо.

Заметьте, однако, что это мое личное экспериментальное наблюдение, которое я сделал 2 года назад. NVIDIA никоим образом не подтверждает, не поддерживает, не поддерживает и может измениться (или уже изменилась) с новыми графическими процессорами и / или драйверами.

Я бы предложил - попробуйте поиграть с некоторыми простыми ядрами, которые выполняют большую часть глупой работы, и посмотрите, сколько времени потребуется для вычислений в различных конфигурациях «включено» / «отключено». Если вам повезет, вы поймаете падение производительности, означающее, что 2 блока фактически выполняются одним SM.

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