CUDA -Мультипроцессоры, размер деформации и максимальное количество потоков на блок :Какова точная взаимосвязь?

Я знаю, что на графическом процессоре CUDA есть мультипроцессоры, которые содержат ядра CUDA. На моем рабочем месте я работаю с GTX 590, который содержит 512 ядер CUDA, 16 мультипроцессоров и имеет размер деформации 32. Это означает, что в каждом мультипроцессоре есть 32 ядра CUDA, которые работают точно с одним и тем же кодом в одной и той же деформации.. И, наконец, максимальное количество потоков на размер блока равно 1024.

Мой вопрос заключается в том, как точно связаны размер блока и размер деформации счетчика мультипроцессора -. Позвольте мне рассказать мое понимание ситуации :Например, я выделяю N блоков с максимальным размером threadPerBlock 1024 на GTX 590. Насколько я понимаю из руководства по программированию CUDA и из других источников, блоки сначала перечисляются оборудование. В этом случае 16 из N блоков назначаются разным мультипроцессорам. Каждый блок содержит 1024 потока, и аппаратный планировщик назначает 32 из этих потоков 32 ядрам одного мультипроцессора. Потоки в одном мультипроцессоре (warp )обрабатывают одну и ту же строку кода и используют общую память текущего мультипроцессора. Если текущие 32 потока сталкиваются с операцией отключения -чипа, такой как чтение памяти -и запись, они заменяются другой группой из 32 потоков из текущего блока. Итак, на самом деле в одном блоке 32 потока, которые точно выполняются параллельно на мультипроцессоре в любой момент времени, а не все 1024 потока. Наконец, если блок полностью обрабатывается мультипроцессором, новый блок потока из списка N блоков потока подключается к текущему мультипроцессору.И, наконец, во время выполнения ядра CUDA в графическом процессоре параллельно работает 512 потоков. (Я знаю, что если блок использует больше регистров, чем доступно на одном мультипроцессоре, то он разделяется для работы на двух мультипроцессорах, но давайте предположим, что в нашем случае каждый блок может поместиться в один мультипроцессор.)

Итак, верна ли моя модель параллельного выполнения CUDA? Если нет, то что не так или отсутствует? Я хочу тонко настроить текущий проект, над которым работаю, поэтому мне нужна наиболее правильная рабочая модель всего этого.

23
задан Roger Dahl 19 July 2012 в 16:10
поделиться