Этого вопроса также начал из следующей ссылки: shared memory optimization confusionколичество блоков может быть запланировано одновременно
В приведенном выше ссылке, от ответа talonmies, я обнаружил, что первое условие числа блоков, которые будет планируется запустить «8». У меня есть 3 вопроса, как показано ниже.
Означает ли это, что только 8 блоков могут быть запланированы одновременно, когда число блоков из условий 2 и 3 превышает 8? Это независимо от каких-либо условий, таких как среда cuda, устройство gpu или алгоритм?
Если это так, это означает, что в некоторых случаях лучше не использовать разделяемую память, это зависит. Затем мы должны подумать, как мы можем судить, какой из них лучше, используя или не используя разделяемую память. Я думаю, что одним из подходов является проверка того, существует ли ограничение доступа к глобальной памяти (узкое место в пропускной способности памяти) или нет. Это означает, что мы можем выбрать «не использовать разделяемую память», если нет ограничения доступа к глобальной памяти. Это хороший подход?
Плюс выше вопроса 2, я думаю, что если данные, которые должна обрабатывать моя программа CUDA, огромны, тогда мы можем думать, что «не использовать разделяемую память» лучше, потому что с ней трудно справиться в общей памяти. Это также хороший подход?
Вы отметили, что фигура из 8 блоков - это максимальное количество одновременных блоков на каждый MP * – talonmies
Я что-то пропустил. Я думал, что максимальное количество параллельных блоков на каждый MP равно 8 всегда (или в большинстве случаев). Тогда каково максимальное количество параллельных блоков на каждый MP, если нет ограничений на сторону алгоритма (программы)? Это число ядер в МП? – user1292251
Нет, это всего 8 одновременных блоков на каждый MP (по крайней мере, на компьютерах 1.x и 2.x). Вы можете запланировать 65535 блоков в каждом разрезе сетки, поддерживаемое аппаратным обеспечением, но только до 8 одновременно выполняются на каждом MP на графическом процессоре. – talonmies