OpenCL有效地分组下三角矩阵

时间:2014-06-03 17:23:08

标签: c++ c opencl gpu

我确定有人之前遇到过这个问题,基本上我有一个2D优化网格NxM的大小,约束为n_i< = m_i,即我只想计算下三角形部分的对矩阵。目前我天真地只在M个工作组的N个本地组中实现所有NxM组合(然后使用localGroupID和workGroupID来标识该对),然后如果约束无法保存计算则返回-inf。

但是有没有更好的方法来设置线程并将它们编入索引,所以我只需要生成(NXM)/ 2个线程而不是完整的NxM。

非常感谢 萨姆

1 个答案:

答案 0 :(得分:1)

当然,这只是几何学。任何直角三角形都可以划分为具有相同区域的矩形。只需将其水平和垂直切成两半,然后将这些碎片重新组合成一个矩形。在实现方面,使您的全局工作大小等于三角形的宽度,高度等于三角形高度的一半。在内核中,如果x坐标大于宽度的一半,请检查是否(x - half)>如果是,则x = width - x - 1,y = y + half_height。沿着边界你会有一些线程分歧,但你不会让一半的工作项闲置。