2015-07-07 2 views
0

Я немного смущен относительно того, как блоки определенных размеров сопоставляются перекосы размера 32.Преобразования размеров блоков в перекосы в CUDA

Я прочитал и опытные из первых рук о том, что внутренний размере блока бытия кратное 32, улучшает производительность.

Скажем, я создаю блок размером 16x16. Может содержать основы из двух разных y-размеров, например. 1 и 2?

Зачем иметь внутреннее измерение 32, улучшая производительность, хотя там технически достаточно потоков, которые должны быть запланированы на варп?

+1

Формула сопоставления изложена в [документации] (http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#thread-hierarchy). Существует много аналогичных вопросов, которые объясняют отображение 2D-потоков в warps, например [this] (http://stackoverflow.com/questions/15044671) или [this] (http://stackoverflow.com/questions/14257550). Внутреннее измерение 32 может или не может помочь в производительности, оно зависит от фактического шаблона доступа и расположения базовых данных. Например, для многих больших 2D-кодов разница в производительности между 16,16 и 32,8 потоковыми блоками невелика. –

ответ

1

Ваш большой вопрос уже задан в About warp and threads и How are CUDA threads divided into warps?. Итак, я сосредоточил этот ответ на , почему.

Размер блока в CUDA всегда кратен размеру основы. Размер основы определяется реализацией, а число 32 в основном связано с организацией общей памяти, шаблонами доступа к данным и управлением потоком данных [1].

Таким образом, размер блока, кратный 32, не повышает производительность, но означает, что все потоки будут использоваться для чего-то. Обратите внимание, что используется для чего-то зависит от того, что вы делаете с потоками внутри блока.

Размер блока, не являющийся кратным 32, округляет до ближайшего множества, даже если вы запрашиваете меньше потоков. См. Презентацию «Основы оптимизации GPU» компании Cliff Woolley от NVIDIA Группа разработчиков технологий имеет интересные подсказки о производительности.

Кроме того, операции с памятью и инструкции выполняются для каждой основы, поэтому вы можете понять важность этого числа. Я думаю, причина, по которой это 32, а не 16 или 64, недокументирована. Поэтому мне нравится помнить размер основы как «« Ответ на конечный вопрос жизни, Вселенная и все »« [2].

[1] David B Kirk and W Hwu Wen-mei. Программирование многопараллельных процессоров: практический подход. Elsevier, 2010.

[2] Руководство автостопом по Галактике.

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