NDRange(OpenCL)和 Grid/Block(CUDA)对比
在 OpenCL 和 CUDA 中,NDRange(OpenCL)和 Grid/Block(CUDA)都是用于定义并行执行层次的抽象概念,但它们的术语和具体实现略有不同。以下是对比表格和详细说明:
核心概念对比
OpenCL (NDRange) | CUDA (Grid/Block) | 关系说明 |
---|---|---|
Global Work Size | Grid | 全局工作项总数,对应 CUDA 的 Grid 中所有线程总数。 |
Local Work Size | Block | 工作组大小,对应 CUDA 的 Block 中线程数。 |
Work-Item | Thread | 最小执行单元(一个线程)。 |
Work-Group | Block | 一组工作项(线程),共享本地内存(OpenCL 的 __local / CUDA 的 __shared__ )。 |
NDRange Offset | 无直接对应 | OpenCL 支持全局工作项的偏移,CUDA 通常通过计算线程索引实现偏移。 |
维度对比
1. 1D 并行
-
OpenCL:
cpp
cl::NDRange global(1024); // 1024 个工作项 cl::NDRange local(128); // 每组