核心内的 CUDA 并行性

问题描述 投票:0回答:2

在CUDA中,它是如何管理GPU核心内部的顺序代码的?

如果我在 for 循环中有一个内核,它以顺序模式管理还是存在逻辑并行?

cuda gpu
2个回答
2
投票

顺序代码仍将按顺序计算,唯一的变化是所有线程将并行计算此代码。

让我们假设以下简单内核(代码写在这里,未测试):

__global__ void kernel(int *array, int N)
{
  if (threadIdx.x < N)
  {
    // complete for loop is computed parallel for different threads
    for (int i=0; i<1000; i++)
    {
      // every single thread perfomes this statement 1000 times
      array[threadIdx.x] += i;
    }
  }
}

完整的 for 循环将针对同一经束内的不同线程并行计算。 但每个线程都会为自己顺序计算这个 for 循环。


0
投票

扭曲/波前中的所有线程一起采用所有相同的代码分支和计算,每个步骤对于所有线程都是相同的。

因此,如果 8 个线程想要分支 Z,24 个线程想要分支 Y,则 8 个线程将等待分支 Y 完成,然后 24 个线程将等待分支 Z 完成,然后所有 32 个线程将一起继续。从物理上讲,在处理器核心中,线程不会在侧面“等待”,它们仍然在一起行进通过两个分支的每个操作,并且“等待”线程通过位掩码对指令隐藏,但从逻辑上来说,为了计时,它是和等待一样。

这就是分支导致 GPU 性能不佳的原因。一两个分支是可以接受的,但性能成本的增长速度比线性增长快得多。

© www.soinside.com 2019 - 2024. All rights reserved.