【发布时间】:2018-01-21 23:27:19
【问题描述】:
要求:
假设我们有 1)五组颜色,每组有三种颜色(颜色在 CPU 中动态生成)和 2)1000 辆汽车的列表,每辆汽车在列表中由它的颜色表示(从组中挑选的颜色)。 我们想将三个参数传递给 OpenCL 内核:1) 一组生成的颜色,2) 汽车的颜色数组 (1D),以及 3) 一个整数数组 (1D),用于根据颜色组测试汽车颜色 (做一个简单的计算)。
结构:
struct GeneratedColorGroup
{
float4 Color1; //16 =2^4
float4 Color2; //16 =2^4
float4 Color3; //16 =2^4
float4 Color4; //16 =2^4
}
struct ColorGroup
{
GeneratedColorGroup Colors[8]; //512 = 2^9
}
内核代码:
__kernel void findCarColorRelation(
const __global ColorGroup *InColorGroups,
const __global float4* InCarColor,
const __global int* CarGroupIndicator
const int carsNumber)
{
int globalID = get_global_id( 0 );
if(globalID < carsNumber)
{
ColorGroup colorGroups;
float4 carColor;
colorGroups = InColorGroups[globalID];
carColor = InCarColor[globalID];
for(int groupIndex =0; groupIndex < 8; groupIndex++)
{
if(colorGroups[groupIndex].Color1 == carColor)
{
CarGroupIndicator[globalID] = groupIndex + 1 ;
break;
}
if(colorGroups[groupIndex].Color2 == carColor)
{
CarGroupIndicator[globalID] = groupIndex * 2 + 2;
break;
}
if(colorGroups[groupIndex].Color3 == carColor)
{
CarGroupIndicator[globalID] = groupIndex * 3 + 3;
break;
}
}
}
}
现在,我们有 1000 个项目,这意味着内核将被执行 1000 次。没关系。
问题: 如您所见,我们有一个全局 ColorGroup 作为内核的输入,这个全局内存有五个“GeneratedColorGroup”类型的项。
我尝试访问这些项目,如上面的代码所示,但我得到了意外的结果。而且执行很慢。
我的代码有什么问题? 非常感谢任何帮助。
【问题讨论】:
标签: opencl