Мой графический процессор имеет 2 мультипроцессора с 48 ядрами CUDA каждый.Что это значит? - PullRequest
2 голосов
/ 12 декабря 2011

Мой GPU имеет 2 мультипроцессора с 48 ядрами CUDA каждый.Означает ли это, что я могу выполнять 96 потоковых блоков параллельно?

Ответы [ 3 ]

3 голосов
/ 26 апреля 2012

Это сводится к семантике. Что на самом деле означает «выполнить» и «работать параллельно»?

На базовом уровне наличие 96 ядер CUDA действительно означает, что у вас есть потенциальная пропускная способность 96 результатов вычислений за такт тактовой частоты ядра.

Ядро в основном представляет собой арифметико-логическое устройство (АЛУ), оно выполняет основные арифметические и логические операции. Помимо доступа к ALU потоку требуются другие ресурсы, такие как регистры, общая память и глобальная память, для запуска. Графический процессор будет держать много потоков «в полете», чтобы все эти ресурсы использовались в полной мере. Количество потоков «в полете», как правило, будет намного выше, чем количество ядер. С одной стороны, эти потоки можно рассматривать как «выполняемые параллельно», поскольку все они потребляют ресурсы на графическом процессоре одновременно. Но с другой стороны, большинство из них на самом деле ждут чего-то, например, данных, поступающих из глобальной памяти, или результатов арифметики, проходящих по конвейерам в ядрах. Графический процессор помещает потоки, которые чего-то ждут, на «задний план». Они потребляют некоторые ресурсы, но на самом ли деле они работают? :)

3 голосов
/ 12 декабря 2011

Нет, это не так.

Из главы 4 руководства по программированию CUDA C:

Количество блоков и деформаций, которые могут находиться и обрабатываться вместе на мультипроцессоре.для данного ядра зависит от количества регистров и разделяемой памяти, используемой ядром, и количества регистров и разделяемой памяти, доступных на многопроцессорном компьютере.Существует также максимальное количество резидентных блоков и максимальное количество резидентных деформаций на один мультипроцессор.Эти ограничения, а также количество регистров и общей памяти, доступной на мультипроцессоре, являются функцией вычислительных возможностей устройства и приведены в Приложении F. Если на мультипроцессор не хватает регистров или общей памяти для обработки хотя бы одного блокаядро не запустится.

Получите руководство по адресу: http://developer.download.nvidia.com/compute/DevZone/docs/html/C/doc/CUDA_C_Programming_Guide.pdf

Чтобы проверить ограничения для вашего конкретного устройства, скомпилируйте и выполните пример cudaDeviceQuery из SDK.

Пока что максимальное количество резидентных блоков на многопроцессорное устройство одинаково для всех вычислительных возможностей и равно 8.

0 голосов
/ 12 декабря 2011

Количество одновременно выполняемых потоков зависит от вашего кода и типа вашего устройства CUDA.Например, Fermi имеет 2 планировщика потоков для каждого потокового мультипроцессора, а для текущих тактовых импульсов ЦП будет запланировано 2 полупериода для расчета или загрузки памяти или вычисления трансцендентной функции.В то время как одна ожидающая нагрузка с половинной деформацией или выполненная трансцендентная функция ядра CUDA могут выполнять что-либо еще.Таким образом, вы можете получить 96 потоков на ядрах, но если ваш код может получить его.И, конечно, у вас должно быть достаточно памяти.

...