OpenCL,越界检查在内核中很重要吗
我见过这样的解决方案:OpenCL,越界检查在内核中很重要吗,opencl,Opencl,我见过这样的解决方案: kernel dp_square (const float *a, float *result) { int id = get_global_id(0); result[id] = a[id] * a[id]; } 及 内核dp_平方(常量浮点*a, 浮点*结果,常量无符号整数计数) { int id=获取全局id(0); 如果(id
kernel dp_square (const float *a,
float *result)
{
int id = get_global_id(0);
result[id] = a[id] * a[id];
}
及
内核dp_平方(常量浮点*a,
浮点*结果,常量无符号整数计数)
{
int id=获取全局id(0);
如果(id<计数)
结果[id]=a[id]*a[id];
}
检查id为了不包含此检查,您必须使用工作组大小除以工作项总数。在这种情况下,您的工作组大小将为1(因为61是prime),这将非常缓慢 这样做通常有两个原因--
为了不包含此检查,您必须使用工作组大小除以工作项总数。在这种情况下,您的工作组大小将为1(因为61是prime),这将非常缓慢 越界访问是一个bug,需要消除,在大多数情况下它会降低执行速度越界访问是一个bug,需要消除,在大多数情况下它会降低执行速度谢谢!这让我明白了你的意思!这为我澄清了这一点
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];
}