2013-11-16 5 views
2

Я использую устройство TESLA T10, и у него есть 2 устройства cuda, а максимальное количество потоков в блоке - 512, а максимальные потоки по каждому измерению - 512 512 614 и максимальный размер сетки (65535 , 65535,1) и имеет 30 мультипроцессоров на каждом устройстве cuda.Максимальное количество потоков на gpu

Теперь я хочу знать, сколько потоков я могу запустить в parallel.i читать предыдущие решения, но ни один из них не очистил мои сомнения. от предыдущего чтения = (30) * 512 нитей я могу выполняться параллельно (maxNoOfMultiprocessor * maxThreadBlockSize)

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

+0

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

+0

, что означает, что мы можем запустить любой из блоков нитей с максимальным количеством нитей в каждом блоке 512, имея в виду, что первый запуск 30 * 512 будет выполнен, а затем 30 * 512 и т. Д. – user2182259

+0

Но вы не можете быть уверены в том, какой большой блок выполняется ранее. –

ответ

3

Для целей этой дискуссии, забывают о том, сколько многопроцессорные есть. Это не имеет никакого отношения к тому, сколько блоков вы можете запустить в ядре (то есть в сетке).

Количество потоков, которые вы можете запускать параллельно (то есть, которые могут выполняться одновременно) отличается от количества потоков, которые вы можете использовать запуск или количество блоков, которые вы можете запустить.

Как правило, вы не хотите запускать сетки, которые имеют только столько потоков, сколько машина может работать в данный момент времени (maxNoOfMultiprocessor * maxThreadBlockSize). Машина хочет гораздо больше потоков, чем это, поэтому может скрывать латентность.

Ваша машина ограничена 512 потоками на блок, но вы можете запустить одномерную сетку до 65535 блоков. Это не означает, что все эти блоки/потоки выполняются одновременно, но машина будет обрабатывать их все в конечном итоге.

+0

, что означает, что максимальный поток блока, который мы можем запустить, составляет 65535 для моей машины, и у каждого может быть максимум 512 потоков. Я понимаю, правильно? и только (maxnoofmultiprocessor * maxthreadblocksize) будет выполняться одновременно из-за ограничения h/w, я прав? – user2182259

+0

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

3

Вы можете создать еще много потоков, чем оборудование может обрабатывать одновременно. Это называется «automatic scalability» от nVidia. Если у вас есть карта с 30 SMX, 30 параллельных блоков будут запущены параллельно, после этого будут запущены 2 блока. Если вы запустили ту же программу с 32 блоками на карте с 16 SMX (предположим, что она существует), запустится 16 блоков, а затем еще 16.

+0

Конечно. Не стесняйтесь повышать любой ответ, который вам интересен, и принимать тот, который вы предпочитаете. – damienfrancois