gpu - GPU组如何进入扭曲/波阵面?

标签 gpu gpgpu gpu-warp

我的理解是,warp是在运行时通过任务调度程序定义的一组线程,CUDA的性能关键部分是warp中的线程差异,有没有办法很好地猜测硬件将如何构造warp在线程块中?

例如,我已经在一个线程块中启动了一个具有1024个线程的内核,那么线程的排列方式如何,我能否从线程索引中得知(或至少可以作一个好猜测)?

由于这样做,可以使给定经线内的线散度最小。

最佳答案

经纱内部的线程排列取决于实现,但是atm我始终遇到相同的行为:

一个warp由32个线程组成,但是warp scheduller每次将发出1条指令以暂停warp(16个线程)

  • 如果使用1D块(仅threadIdx.x尺寸有效),则扭曲调度程序将针对 threadIdx.x =(0..15)(16..31)发出1条指令 ...等
  • 如果您使用2D块(threadIdx.x和threadIdx.y尺寸有效),那么扭曲调度程序将尝试按照以下方式发出:

  • threadIdx.y = 0 threadIdx.x =(0 ..15)(16..31) ...等

    因此,具有连续threadIdx.x组件的线程将以16为一组执行同一条指令。

    关于gpu - GPU组如何进入扭曲/波阵面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15266829/

    相关文章:

    optimization - 使用 CUDA 进行蒙特卡洛优化

    c++ - OpenCL,一半与 float 性能

    cuda - CUDA 中间接访问导致未合并的全局内存访问

    linux - 错误 : NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver

    cuda - GPU L1 和 L2 缓存统计信息

    CUDA扭曲同步问题

    c - cudaSetDevice() 编号在进程间是否一致?

    Java:将多维数组转换或引用为一维数组

    cuda - 在 CUDA 扭曲级别减少中删除 __syncthreads()

    cuda - 为什么我的 CUDA warp shuffle sum 在一个洗牌步骤中使用了错误的偏移量?