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

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

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

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

Ответы на вопрос(1)

Ваш ответ на вопрос