为什么CUDA和OpenCL中的GPU线程在网格中分配?

Per*_*eng 2 multithreading gpgpu opencl

我刚刚学习OpenCL,而且我正在尝试启动内核.为什么GPU线程是在网格中管理的?

我将详细阅读更多相关内容,但通过简单的解释会很好.使用GPGPU时总是这样吗?

Eri*_*ric 5

这是一种常见的方法,用于CUDA,OpenCL和ITI流.

网格背后的想法是在正在处理的数据和执行数据处理的线程之间提供简单但灵活的映射.在简单版本的GPGPU执行模型中,为一维,二维或三维数据网格中的每个输出元素"分配"一个GPU线程.为了处理该输出元素,线程将从输入数据网格中的相应位置或相邻位置读取一个(或多个)元素.通过在网格中组织线程,线程更容易确定要读取的输入数据元素以及存储输出数据元素的位置.

这与通用的多核CPU线程模型形成对比,其中每个CPU核心分配一个线程,每个线程处理许多输入和输出元素(例如,四核系统中的1/4数据).