我正在 CUDA 中编写一些代码,并且对实际并行运行的内容有些困惑。
假设我正在调用这样的内核函数:
kenel_foo<<<A, B>>>
. 现在根据我下面的设备查询,每个块最多可以有 512 个线程。那么我是否保证每次运行时每个块都会进行 512 次计算kernel_foo<<<A, 512>>>
?但是这里说一个线程在一个 CUDA 核心上运行,这意味着我可以同时运行 96 个线程吗?(请参阅下面的 device_query)。我想知道积木。每次我打电话
kernel_foo<<<A, 512>>>
时,并行进行多少计算以及如何进行?我的意思是它是一个接一个地完成还是块也并行化?如果是,那么有多少块可以并行运行 512 个线程?这里说一个块在一个CUDA SM上运行,那么12个块可以同时运行是真的吗?如果是,当所有 12 个块同时运行时,每个块最多可以有多少个线程,8、96 或 512 个同时运行?(请参阅下面的 device_query)。另一个问题是,如果
A
值约为 50,将内核启动为kernel_foo<<<A, 512>>>
还是更好kernel_foo<<<512, A>>>
?假设不需要线程同步。
抱歉,这些可能是基本问题,但有点复杂... 可能重复:
流式多处理器、块和线程 (CUDA)
CUDA 块/扭曲/线程如何映射到 CUDA 核心?
谢谢
这是我的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