gpt4 book ai didi

OpenCL,越界检查在内核中很重要

转载 作者:行者123 更新时间:2023-12-04 18:18:55 26 4
gpt4 key购买 nike

我见过这样的解决方案:

kernel dp_square (const float *a,
float *result)
{
int id = get_global_id(0);
result[id] = a[id] * a[id];
}

kernel dp_square (const float *a,
float *result, const unsigned int count)
{
int id = get_global_id(0);
if(id < count)
result[id] = a[id] * a[id];
}

检查 id< 计数重要吗?如果内核工作项尝试处理不可用的项,会发生什么情况?第一个示例中不存在的原因可能是程序员只是确保全局大小等于要处理的元素数量(这是正常的)吗?

最佳答案

这样做通常有两个原因 -

  1. 确保开发人员错误不会终止代码或读取坏内存

  2. 因为有时运行比数据点更多的工作项是最佳选择。例如,如果我的设备的最佳工作组大小是 32(并不罕见),并且我有一个包含 61 条数据的数组,我将运行 64 个工作项,而最后三个将简单地“装死”。 “

为了不包括此检查,您必须使用工作组大小除以工作项总数。在这种情况下,工作组大小将为 1(因为 61 是质数),这会非常慢!

关于OpenCL,越界检查在内核中很重要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11112218/

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