首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为OpenCL马里平台更改值OpenCL?

如何为OpenCL马里平台更改值OpenCL?
EN

Stack Overflow用户
提问于 2022-03-30 12:03:41
回答 1查看 127关注 0票数 0

我正在为不同的设备开发OpenCL代码。目前,我使用的是Rockchip RK3588 (OpenCL device -马里G 610 r0p0)。该程序算法最初是在CUDA上编写的,其翘曲尺寸为32。在OpenCL中,这个值被命名为“子工作组大小”(计数当前时间运行的工作项)。此外,这个值可以从值CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE中得到。

例如,在Intel上,我可以使用__attribute__((intel_reqd_sub_group_size(32)))设置这个值。现在,在“马里-G 610 r0p0”中,我得到了"CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE = 16",但是程序工作不正确,我需要将这个值更改为32。

代码语言:javascript
复制
<clinfo> returned me the next info:
................
Preferred work group size multiple (device) 16
Preferred work group size multiple (kernel) 16
Max sub-groups per work group 64
................

也许有人能帮我解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2022-03-30 16:12:51

你不正确地解释了这个价值。“首选工作组大小倍数”值就是:一个首选项。OpenCL API告诉您,它更喜欢工作组的倍数为16,但如果绝对需要的话,您可以指定其他大小。但是,幸运的是,你需要一个32的大小,它是非常满意的。

您实际上需要做的是在将内核排队到GPU时手动指定工作组大小。如果您不指定它,API将自己确定大小应该是什么,虽然它的猜测通常很好,但是如果您在工作组本身的级别上工作(在简化算法中非常常见),您可能需要手动指定它。

当您提交内核时,应该使用类似于以下代码的代码:

代码语言:javascript
复制
size_t globalWorkSize[] {512};
cl_event event;

clEnqueueNDRangeKernel(
    command_queue,
    kernel,
    1, //work_dim
    nullptr, //global_work_offset
    globalWorkSize,
    nullptr, //local_work_size
    0, //num_events_in_wait_list
    nullptr, //event_wait_list
    &event
);

您需要添加一个显式指定工作组大小的参数:

代码语言:javascript
复制
size_t globalWorkSize[] {512};
size_t localWorkSize[] {32}; //Will create 16 work groups
cl_event event;

clEnqueueNDRangeKernel(
    command_queue,
    kernel,
    1, //work_dim
    nullptr, //global_work_offset
    globalWorkSize,
    localWorkSize,
    0, //num_events_in_wait_list
    nullptr, //event_wait_list
    &event
);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71676880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档