我正在编写GPU代码来解决问题,并且试图避免分支(因为我知道这对GPU非常不利)
new_w = w * 0.8;
w = some_number;
h = some_number;
for (int i = 0; i < num_rectangles; i++)
{
// for each 2d vector, get the x, y
cx = abs(array_of_2d_points[i * 2]);
cy = abs(array_of_2d_points[i * 2 + 1]);
// check if the 2d vector is inside the w, h
if (cx < w / 2 && cy < h / 2)
{
// if it is inside the rectangle; update the new_w (which was previously set to 80% of the w)
new_w = max(cx * 2, new_w);
}
}
在这里避开分支有更聪明的方法吗?
我能想到的一种方法是将布尔值转换为整数
int is_inside = cx < w / 2 && cy < h / 2;
new_w = max(cx * 2 * is_inside, new_w);
但是它实际上避免分支吗?仅使用<
会导致GPU分支吗?
我尝试了将bool转换为int的上述方法。速度大致相同