如何将OpenCL任务拆分为较小的块?

时间:2018-06-22 05:13:13

标签: opencl gpgpu

我正在使用OpenCL将长向量乘以另一个向量。 特别地,第二个矢量实际上是一个余弦函数,其中输入参数是global_id。

由于我的GPU的RAM大小有限(3 GB),要对大于此值的向量执行上述任务,我需要将长向量切成较短的向量,然后逐个执行。

最初,我是通过在clEnqueueMapBuffer函数中引入offset并对其进行循环来实现的:

void* p_map_inV = clEnqueueMapBuffer(queue, d_inV, CL_TRUE, CL_MAP_READ, m*mem_size_chunk, mem_size_chunk, 0, NULL, NULL, &error);

其中,m是循环变量。这似乎可行,但是我意识到增加向量长度所花费的时间比线性还要多。那使我认为存在一些开销,也许我使用了错误的方法。

您认为我可以通过单独执行内核来实现此目的吗?例如,向global_id添加偏移量?

如果您能让我知道完成此操作的典型方式,我将不胜感激,

0 个答案:

没有答案