2016-10-21 3 views
-1


У меня есть несколько вопросов: (я потратил довольно много времени, просто пытаюсь найти ответы)
оптимизация Cuda, многопроцессорные, параллельное выполнение ядра

  1. Где я могу найти информацию о максимальном количестве блоков на потоковый мультипроцессор, на моем устройстве? (Я знаю, что это может быть 16 блоков, но не может подтвердить это) Мне нужно прочитать его как myDevice.maxBlocksPerMultiProcessor внутри кода.

  2. Будет ли запуск ядра по умолчанию (например, <<<blocks, threads>>> по потоку по умолчанию 0) равномерно распределить вычисления среди всех многопроцессоров? (Или это будет делать только один мультипроцессор).
    Я понимаю, что это зависит от моей конфигурации сетки, и я не спрашиваю об этом. Давайте просто предположим, что у меня есть «удобная для пользователя» сетка (я имею в виду block-threads/maxThreadPerMultiProcessors максимизация занятости многопроцессоров).
    Будет ли он запускаться на нескольких мультипроцессорах по умолчанию?

  3. Позволяет сказать: мой GPU поддерживает 16 блоков на мультипроцессоры & 2048 maxThreadPerMultiProcessors. Затем я хотел бы запустить мое ядро ​​с <<< N*16, 126 >>>, чтобы максимизировать загрузку многопроцессоров. Могу ли я повысить производительность с использованием потоков и/или одновременного выполнения ядра?
    (я не думаю, что это так, потому что я не могу получить более 100% заполняемости многопроцессорной * я завязывать это звучит абсурдно, но мой английский не совершенен *)

извините за мой плохой английский!
Благодарим вас за помощь!

ответ

2
  1. Где я могу найти информацию о максимальном количестве блоков в потоковом многопроцессорной, на моем устройстве?

    Вы можете получить эту информацию из руководства по программированию here. Вы захотите узнать вычислительную способность вашего устройства. Вы можете посмотреть, что до here. Вы также можете программно вычислить возможности вычисления вашего устройства; изучите пример deviceQueryCUDA sample code. Если вам требуется максимальное количество блоков на мультипроцессор, вам необходимо включить версию таблицы в руководство по программированию, приведенную выше, в вашу программу, а затем использовать вычислительную способность для ее определения во время выполнения.

  2. будет (например, <<<blocks, threads>>> на поток по умолчанию 0) раздвинутые вычисления равномерно по умолчанию запуск ядра среди всех мультипроцессоров?

    Да, это фундаментальная часть модели программирования CUDA. Пока вы запустили достаточно блоков, чтобы разместить по меньшей мере один на каждом SM, дистрибьютор работы GPU будет распределять блоки как можно более равномерно.

  3. Да, запуск ядра <<<N, 128>>>, где N является достаточно большим, должен быть благоприятным фактором для достижения максимальной занятости. Занятость может иметь различные другие ограничители (например, регистры, использование общей памяти и т. Д.), так что это не гарантия ничего, но он должен разрешить для максимального использования (2048 потоков на SM) в вашем примере. Что касается потоков (я думаю, вы действительно хотите спросить о параллельных ядрах), то, как правило, верно, что, как только вы обнаружите достаточный параллелизм для насыщения определенного графического процессора, разоблачение большего количества параллелизма может не принести никакой дополнительной пользы. Тем не менее, это может принести выгоду будущему графическому процессору, а кроме того, потоки позволяют использовать вещи, отличные от одновременных ядер. Потоки позволяют перекрывать копию и вычислять, что может быть еще одним ценным фактором в улучшении общей производительности.

Многие из этих вопросов рассматриваются в programming guide sections 2-5 на модели программирования CUDA, аппаратной реализации и принципов деятельности. CUDA best practices guide также содержит полезную связанную информацию.

+0

Я не могу узнать, как получить максимальное количество блоков в поточном мультипроцессоре. Можете ли вы сказать что-то еще, мне нужна эта информация. – cukier9a7b5

+0

Я сделал это, мой вывод ничего не говорит о максимальных блоках для потокового мультипроцессора. [мой вывод в pastbin] (http://pastebin.com/GihGnaS0) – cukier9a7b5

+2

Извините, моя ошибка. этот атрибут недоступен программно. Если вам нужна эта информация в вашей программе во время выполнения, вам нужно будет отнести данные руководства по программированию в таблицу в своей программе, а затем просмотреть возможности вычисления во время выполнения и использовать ее для определения атрибута. Я соответствующим образом изменил свой ответ. –

Смежные вопросы