OpenCL有效地分组下三角矩阵

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

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

非常感谢Sam

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