【问题标题】:Cuda, executional thread order in a 3d-blockCuda,3d 块中的执行线程顺序
【发布时间】:2012-07-15 08:21:45
【问题描述】:

作为标题,我想知道正确的执行顺序,以防我们有 3d 块

我想记得我已经读过一些关于它的东西,但那是前一段时间,我不记得在哪里,但它是由一个看起来不那么可靠的人来的..

无论如何,我想对此进行一些确认。

是不是如下(分经)?

[0, 0, 0]...[blockDim.x, 0, 0] - [0, 1, 0]...[blockDim.x, 1, 0] - (...) - [ 0, blockDim.y, 0]...[blockDim.x, blockDim.y, 0] - [0, 0, 1]...[blockDim.x, 0, 1] - (...) - [ 0, blockDim.y, 1]...[blockDim.x, blockDim.y, 1] - (...) - [blockDim.x, blockDim.y, blockDim.z]

【问题讨论】:

    标签: cuda


    【解决方案1】:

    是的,这是正确的顺序;线程按块内的 x 维度首先变化,然后是 y,然后是 z(相当于列优先顺序)进行排序。计算可以表示为

    int threadID = threadIdx.x + 
                   blockDim.x * threadIdx.y + 
                   (blockDim.x * blockDim.y) * threadIdx.z;
    
    int warpID = threadID / warpSize;
    int laneID = threadID % warpsize;
    

    这里threadID是块内的线程号,warpID是块内的warp,laneID是warp内的线程号。

    请注意,线程不一定以与块内此顺序相关的任何可预测顺序执行。执行模型保证同一个warp中的线程被“锁步”执行,但你不能从块内的线程编号推断出更多。

    【讨论】:

    • 没有。不保证此顺序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    相关资源
    最近更新 更多