2012-04-04 2 views
0

Этого вопроса также начал из следующей ссылки: shared memory optimization confusionколичество блоков может быть запланировано одновременно

В приведенном выше ссылке, от ответа talonmies, я обнаружил, что первое условие числа блоков, которые будет планируется запустить «8». У меня есть 3 вопроса, как показано ниже.

  1. Означает ли это, что только 8 блоков могут быть запланированы одновременно, когда число блоков из условий 2 и 3 превышает 8? Это независимо от каких-либо условий, таких как среда cuda, устройство gpu или алгоритм?

  2. Если это так, это означает, что в некоторых случаях лучше не использовать разделяемую память, это зависит. Затем мы должны подумать, как мы можем судить, какой из них лучше, используя или не используя разделяемую память. Я думаю, что одним из подходов является проверка того, существует ли ограничение доступа к глобальной памяти (узкое место в пропускной способности памяти) или нет. Это означает, что мы можем выбрать «не использовать разделяемую память», если нет ограничения доступа к глобальной памяти. Это хороший подход?

  3. Плюс выше вопроса 2, я думаю, что если данные, которые должна обрабатывать моя программа CUDA, огромны, тогда мы можем думать, что «не использовать разделяемую память» лучше, потому что с ней трудно справиться в общей памяти. Это также хороший подход?

+0

Вы отметили, что фигура из 8 блоков - это максимальное количество одновременных блоков на каждый MP * – talonmies

+0

Я что-то пропустил. Я думал, что максимальное количество параллельных блоков на каждый MP равно 8 всегда (или в большинстве случаев). Тогда каково максимальное количество параллельных блоков на каждый MP, если нет ограничений на сторону алгоритма (программы)? Это число ядер в МП? – user1292251

+0

Нет, это всего 8 одновременных блоков на каждый MP (по крайней мере, на компьютерах 1.x и 2.x). Вы можете запланировать 65535 блоков в каждом разрезе сетки, поддерживаемое аппаратным обеспечением, но только до 8 одновременно выполняются на каждом MP на графическом процессоре. – talonmies

ответ

3

Количество одновременно запланированных блоков всегда будет ограничено что-то.

Игра с калькулятором занятости CUDA должна дать понять, как это работает. Использование трех типов ресурсов влияет на количество одновременно запланированных блоков. Это, Threads Per Block, Registers Per Thread и Shared Memory Per Block.

Если вы создали ядро, которое использует 1 Threads Per Block, 1 Registers Per Thread и 1 Shared Memory Per Block на Compute Capability 2,0, вы ограничены Max Blocks per Multiprocessor, что 8. Если начать увеличение Shared Memory Per Block, то Max Blocks per Multiprocessor будет продолжать быть вашим ограничивающим фактором, пока вы достигаете порога, при котором Shared Memory Per Block становится ограничивающим фактором. Так как на каждый SM-порт имеется 49152 байта общей памяти, то это происходит примерно в 8/49152 = 6144 байта (это немного меньше, потому что какая-то разделяемая память используется системой и распределяется в кусках по 128 байт).

Другими словами, с учетом предела 8 Max Blocks per Multiprocessor использование общей памяти полностью бесплатное (поскольку оно относится к числу одновременно работающих блоков), при условии, что вы остаетесь ниже порогового значения, при котором Shared Memory Per Block становится ограничивающим фактором.

То же самое касается использования регистра.

+0

Спасибо за ваш ответ. BTW, где 128 байтов, в строке 7, параграф 3. Является ли это своего рода значимым размером хранилища? – user1292251

+0

Я нашел ответ. Это «Размер блока распределения общей памяти». Это то же самое, что вы имели в виду? – user1292251

+0

Да.В идеале, «Размер блока распределения общей памяти» должен составлять 1 байт. Число 128 представляет собой компромисс, который NVIDIA сделала между этим идеалом и целью максимизации общей производительности для чипа. Можно предположить, что удельный выигрыш заключался в том, что им не пришлось включать в себя 6 нижних адресных строк и соответствующую логику, которая требовалась бы для адресации с 1-батной детализацией ниже 128. –

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