CUDA 块并行性

Posted

技术标签:

【中文标题】CUDA 块并行性【英文标题】:CUDA Block parallelism 【发布时间】:2013-01-27 17:41:30 【问题描述】:

我正在 CUDA 中编写一些代码,但对实际并行运行的内容有点困惑。

    假设我正在调用这样的内核函数:kenel_foo<<<A, B>>>。现在根据我下面的设备查询,每个块最多可以有 512 个线程。那么我是否保证每次运行kernel_foo<<<A, 512>>> 时每个块都会进行 512 次计算?但它说here 一个线程在一个 CUDA 核心上运行,这意味着我可以同时运行 96 个线程? (参见下面的 device_query)。

    我想了解这些块。每次我打电话给kernel_foo<<<A, 512>>>,有多少计算是并行完成的,如何?我的意思是它是一个接一个地完成还是块也并行化?如果是,那么有多少块可以并行运行 512 个线程?它说here 一个块在一个 CUDA SM 上运行,那么 12 个块可以同时运行是真的吗?如果是,当所有 12 个块同时运行时,每个块最多可以有多少个线程,8、96 或 512 个同时运行? (参见下面的 device_query)。

    另一个问题是,如果A 的值约为50,那么以kernel_foo<<<A, 512>>>kernel_foo<<<512, A>>> 启动内核更好吗?假设不需要线程同步。

抱歉,这些可能是基本问题,但有点复杂...可能重复:Streaming multiprocessors, Blocks and Threads (CUDA)How do CUDA blocks/warps/threads map onto CUDA cores?

谢谢

这是我的device_query

Device 0: "Quadro FX 4600"
CUDA Driver Version / Runtime Version          4.2 / 4.2
CUDA Capability Major/Minor version number:    1.0
Total amount of global memory:                 768 MBytes (804978688 bytes)
(12) Multiprocessors x (  8) CUDA Cores/MP:    96 CUDA Cores
GPU Clock rate:                                1200 MHz (1.20 GHz)
Memory Clock rate:                             700 Mhz
Memory Bus Width:                              384-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: 8192
Warp size:                                     32
Maximum number of threads per multiprocessor:  768
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 execution:                 No with 0 copy engine(s)
Run time limit on kernels:                     Yes
Integrated GPU sharing Host Memory:            No
Support host page-locked memory mapping:       No
Concurrent kernel execution:                   No
Alignment requirement for Surfaces:            Yes
Device has ECC support enabled:                No
Device is using TCC driver mode:               No
Device supports Unified Addressing (UVA):      No
Device PCI Bus ID / PCI location ID:           2 / 0

【问题讨论】:

【参考方案1】:

查看this answer 以获得一些初步指导!答案有点过时了,因为它谈论的是具有 1.x 计算能力的较旧 GPU,但无论如何它都与您的 GPU 相匹配。较新的 GPU(2.x 和 3.x)具有不同的参数(每个 SM 的内核数等),但是一旦您了解线程和块的概念以及超额订阅以隐藏延迟的概念,这些更改很容易理解。

另外,您可以使用this Udacity course 或this Coursera course 开始。

【讨论】:

以上是关于CUDA 块并行性的主要内容,如果未能解决你的问题,请参考以下文章

GPU 中的并行性 - CUDA / OpenCL

关于 GPU 上的并行性 (CUDA) 的问题

与 CUDA 中的线程和块并行化

CUDA如何获取网格、块、线程大小和并行化非方阵计算

CUDA 学习(十六)优化策略1:并行/串行在GPU/ CPU 上的问题分解

CUDA动态并行中的同步