如何在此处避免分支进行GPU优化

时间:2019-03-21 04:26:25

标签: cuda logic gpu

我正在编写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的上述方法。速度大致相同

0 个答案:

没有答案