2

我只是在学习OpenCL,我正处于尝试启动内核的时候。为什么 GPU 线程是在网格中管理的?

我将详细阅读有关此内容的更多信息,但如果有一个简单的解释会很好。使用GPGPU时总是这样吗?

4

4 回答 4

5

这是一种常见的方法,用于 CUDA、OpenCL 和我认为的 ATI 流。

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

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

于 2009-08-31T12:08:53.223 回答
1

我将引用一个经典的类比,将一个方形钉子放在一个圆孔中。好吧,在这种情况下,GPU 是一个非常方正的孔,不像 GP(通用)建议的那样圆润。

上面的解释提出了2D纹理等思想。GPU的架构是所有处理都在流中完成,每个流中的管道是相同的,所以正在处理的数据需要这样分割。

于 2009-09-22T05:56:17.613 回答
1

简单的答案是 GPU 旨在处理 2D 像素网格的图像和纹理。在 DirectX 或 OpenGL 中渲染三角形时,硬件会将其光栅化为像素网格。

于 2009-08-28T17:30:34.963 回答
0

这是一个很好的 API 的一个原因是,通常您正在使用具有多个嵌套循环的算法。如果您有一个、两个或三个循环,那么一个、两个或三个维度的网格可以很好地映射到问题,为您提供每个索引值的线程。

因此,您在内核中需要的值(索引值)自然会在 API 中表达。

于 2009-12-19T12:15:58.597 回答