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