2013-07-23 2 views
5

У нас есть рабочая станция с двумя картами Nvidia Quadro FX 5800. Запуск образца deviceQuery CUDA показывает, что максимальные потоки на мультипроцессор (SM) равны 1024, тогда как максимальные потоки на один блок равны 512.CUDA: Каковы потоки на мультипроцессор и потоки на разметку блока?

Учитывая, что только один блок может выполняться на каждом SM за раз, почему максимальные потоки/процессор удваивает максимальные потоки/блок? Как мы используем другие 512 потоков на SM?

Device 1: "Quadro FX 5800" 
    CUDA Driver Version/Runtime Version   5.0/5.0 
    CUDA Capability Major/Minor version number: 1.3 
    Total amount of global memory:     4096 MBytes (4294770688 bytes) 
    (30) Multiprocessors x ( 8) CUDA Cores/MP: 240 CUDA Cores 
    GPU Clock rate:        1296 MHz (1.30 GHz) 
    Memory Clock rate:        800 Mhz 
    Memory Bus Width:        512-bit 
    Max Texture Dimension Size (x,y,z)    1D=(8192), 2D=(65536,32768), 3D=(2048,2048,2048) 
    Max Layered Texture Size (dim) x layers  1D=(8192) x 512, 2D=(8192,8192) x 512 
    Total amount of constant memory:    65536 bytes 
    Total amount of shared memory per block:  16384 bytes 
    Total number of registers available per block: 16384 
    Warp size:          32 
    Maximum number of threads per multiprocessor: 1024 
    Maximum number of threads per block:   512 
    Maximum sizes of each dimension of a block: 512 x 512 x 64 
    Maximum sizes of each dimension of a grid:  65535 x 65535 x 1 
    Maximum memory pitch:       2147483647 bytes 
    Texture alignment:        256 bytes 
    Concurrent copy and kernel execution:   Yes with 1 copy engine(s) 
    Run time limit on kernels:      No 
    Integrated GPU sharing Host Memory:   No 
    Support host page-locked memory mapping:  Yes 
    Alignment requirement for Surfaces:   Yes 
    Device has ECC support:      Disabled 
    Device supports Unified Addressing (UVA):  No 
    Device PCI Bus ID/PCI location ID:   4/0 
    Compute Mode: 
    < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) > 

Cheers, Джеймс.

+4

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

ответ

18

Учитывая, что только один блок может быть выполнен на каждом SM в то время,

Это утверждение в корне неверно. Запрет конфликтов ресурсов и принятие достаточного количества потоков в ядре (т. Е. Сетке), SM, как правило, имеет несколько назначенных ему блоков потоков.

Основная единица исполнения - warp. Деформация состоит из 32 потоков, выполняемых совместно блокировкой SM, по циклу инструкций по циклу цикла.

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

Существует нет концептуальной разницы между выбором перекосов с одного и того же блока резьбы для выполнения или искажений из разных блоков потоков. У SMs может быть много потоков данных, находящихся на них (то есть с такими ресурсами, как регистры и разделяемая память, назначенные каждому резидентному файловому блоку), и планировщик warp будет выбирать среди всех перекосов во всех резидентных потоковых блоках, чтобы выбрать следующий warp для выполнения на любой заданный цикл.

Следовательно, SM имеет большее количество потоков, которые могут быть «резидентными», потому что он может поддерживать более одного блока, даже если этот блок максимально сконфигурирован с потоками (в этом случае 512). Мы используем больше, чем предел threadblock, имея много потоков.

Вы также можете изучить идею использования в программах GPU.

+0

Ах, вот где я ошибся! Спасибо, что ответили на вопрос Роберта. –