2013-12-25 4 views
0

В CUDA, SM может запускать несколько блоков одновременно, если каждый блок не будет стоить слишком много ресурсов.Как SM в CUDA запускает несколько блоков одновременно?

На Fermi мы знаем, что SM состоит из 32kb Место для регистрации. предположим, что поток использует регистр 32, поэтому этот SM может lanuch один блок, который содержит 256 ((32*1024)/(32*4)) потоков. Если SM может одновременно запускать несколько блоков, мы также можем настроить 32 блока для блока и 8 блоков для SM. Есть ли разница?

+0

@Roger Dahl: Я полагаю, что вы можете дать мне хорошее объяснение, спасибо :) – stonestrong

+1

Сначала укажите, что файл регистра, на который вы ссылаетесь, содержит 32k * регистров *, а не 32kb. Это значительно меняет вашу математику. – talonmies

ответ

1

Как комментирует @talonmies, ваша математика не совсем корректна. Но ключевым моментом является то, что SM содержит баланс многих различных типов ресурсов. Чем лучше ваши параметры запуска ядра и ядра соответствуют этому балансу, тем лучше ваша производительность.

Я не проверял числа для Kepler (вычислительная способность 3.x), но для Fermi (2.x) SM может отслеживать 48 параллельных перекосов (1536 потоков) и 8 параллельных блоков. Это означает, что если вы выбрали низкое количество потоков для ваших блоков, 8 параллельных блоков станут ограничивающим фактором для размещения в вашем ядре. Например, если вы выбрали 32 потока на блок, вы получите до 256 (8 * 32) одновременных потоков, запущенных на SM, в то время как SM может работать до 1,536 потоков (48 * 32).

В калькуляторе занятости вы можете увидеть, что такое различные аппаратные ограничения, и он скажет вам, какой из них станет ограничивающим фактором вашего конкретного ядра. Вы можете поэкспериментировать с вариациями параметров запуска, использования общей памяти и использования регистров, чтобы узнать, как они влияют на ваше размещение.

Занятость - это еще не все, что касается производительности. Увеличение занятости приводит к увеличению способности скрывать задержку передачи памяти. Когда пропускная способность памяти насыщена, увеличение занятости еще больше не помогает. В игре есть и другой эффект. Увеличение размера блока может уменьшение заполняемость, но в то же время увеличение количество параллелизма уровня инструкций (ILP), доступное в вашем ядре. В этом случае уменьшение занятости может повысить производительность.

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