gpt4 book ai didi

c++ - 将相同的数据发送到 OpenCL 中的多个内核

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:18:32 27 4
gpt4 key购买 nike

我有多个内核,在第一个内核中我发送了一些条目,第一个内核的输出是下一个内核的输入。我的内核队列重复此行为 8 次,直到最后一个内核向我发送我需要的真实输出。

这是我所做的一个例子:

cl::Kernel kernel1 = cl::Kernel(OPETCL::program, "forward");

//agrego los argumetnos del kernel
kernel1.setArg(0, cl_rowCol);
kernel1.setArg(1, cl_data);
kernel1.setArg(2, cl_x);
kernel1.setArg(3, cl_b);
kernel1.setArg(4, sizeof(int), &largo);

//ejecuto el kernel
OPETCL::queue.enqueueNDRangeKernel(kernel1, cl::NullRange, global, local, NULL, &profilingApp);


/********************************/
/** ejecuto las simetrias de X **/
/********************************/
cl::Kernel kernel2 = cl::Kernel(OPETCL::program, "forward_symmX");


//agrego los argumetnos del kernel
kernel2.setArg(0, cl_rowCol);
kernel2.setArg(1, cl_data);
kernel2.setArg(2, cl_x);
kernel2.setArg(3, cl_b);
kernel2.setArg(4, cl_symmLOR_X);
kernel2.setArg(5, cl_symm_Xpixel);
kernel2.setArg(6, sizeof(int), &largo);

//ejecuto el kernel
OPETCL::queue.enqueueNDRangeKernel(kernel2, cl::NullRange, global, local, NULL, &profilingApp);

OPETCL::queue.finish();

OPETCL::queue.enqueueReadBuffer(cl_b, CL_TRUE, 0, sizeof(float) * lors, b, NULL, NULL);

在这种情况下,cl_b 是我需要的输出。



我的问题是我发送给内核的参数是否对所有内核都相同,但只有一个不同。

我设置参数的操作是否正确?
在所有内核执行期间,参数都保存在设备中??

最佳答案

因为您使用的是相同的队列和 OpenCL 上下文,所以这没问题,您的内核可以使用以前内核计算的数据(参数),并且数据将保存在设备上。我建议你使用 clFinish在每次内核执行以确保前一个内核完成计算之后,在下一个内核开始之前。或者,您可以使用事件来确保这一点。

关于c++ - 将相同的数据发送到 OpenCL 中的多个内核,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29935574/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com