未参与投票的线程使用__ballot_sync()返回值的后果

  • 1 replies
  • 325 views
未参与投票的线程使用__ballot_sync()返回值的后果
« 于: 四月 08, 2021, 08:23:25 pm »
源代码:
#include<stdio.h>
__global__ void k1(){
    int x=threadIdx.x%2;
    unsigned a =__ballot_sync(0x0000ffff,x);
    printf("id:%d a:%x\n",threadIdx.x,a);
}
int main(){
    k1<<<1,32>>>();
    printf("%s\n",cudaGetErrorString(cudaDeviceSynchronize()));
    return 0;
}

运行结果:
cuda-memcheck ./wallVoteFunction
========= CUDA-MEMCHECK
id:0 a:aaaa
id:1 a:aaaa
id:2 a:aaaa
id:3 a:aaaa
id:4 a:aaaa
id:5 a:aaaa
id:6 a:aaaa
id:7 a:aaaa
id:8 a:aaaa
id:9 a:aaaa
id:10 a:aaaa
id:11 a:aaaa
id:12 a:aaaa
id:13 a:aaaa
id:14 a:aaaa
id:15 a:aaaa
id:16 a:aaaa
id:17 a:aaaa
id:18 a:aaaa
id:19 a:aaaa
id:20 a:aaaa
id:21 a:aaaa
id:22 a:aaaa
id:23 a:aaaa
id:24 a:aaaa
id:25 a:aaaa
id:26 a:aaaa
id:27 a:aaaa
id:28 a:aaaa
id:29 a:aaaa
id:30 a:aaaa
id:31 a:aaaa
no error
========= ERROR SUMMARY: 0 errors

未参与投票的线程使用__ballot_sync()返回值会有什么问题吗?

Re: 未参与投票的线程使用__ballot_sync()返回值的后果
« 回复 #1 于: 四月 12, 2021, 05:12:46 pm »
源代码:
#include<stdio.h>
__global__ void k1(){
    int x=threadIdx.x%2;
    unsigned a =__ballot_sync(0x0000ffff,x);
    printf("id:%d a:%x\n",threadIdx.x,a);
}
int main(){
    k1<<<1,32>>>();
    printf("%s\n",cudaGetErrorString(cudaDeviceSynchronize()));
    return 0;
}

运行结果:
cuda-memcheck ./wallVoteFunction
========= CUDA-MEMCHECK
id:0 a:aaaa
id:1 a:aaaa
id:2 a:aaaa
id:3 a:aaaa
id:4 a:aaaa
id:5 a:aaaa
id:6 a:aaaa
id:7 a:aaaa
id:8 a:aaaa
id:9 a:aaaa
id:10 a:aaaa
id:11 a:aaaa
id:12 a:aaaa
id:13 a:aaaa
id:14 a:aaaa
id:15 a:aaaa
id:16 a:aaaa
id:17 a:aaaa
id:18 a:aaaa
id:19 a:aaaa
id:20 a:aaaa
id:21 a:aaaa
id:22 a:aaaa
id:23 a:aaaa
id:24 a:aaaa
id:25 a:aaaa
id:26 a:aaaa
id:27 a:aaaa
id:28 a:aaaa
id:29 a:aaaa
id:30 a:aaaa
id:31 a:aaaa
no error
========= ERROR SUMMARY: 0 errors

未参与投票的线程使用__ballot_sync()返回值会有什么问题吗?

你好, 不在mask中的线程, 请:
(1)不要参与ballot.
(2)不要使用ballot的结果.
(例如, 被某种条件给分支掉或者predicated off的线程)

否则可能会产生未定义的结果(例如你这个代码). 该未定义行为可能在部分条件下, 和部分计算能力的卡上, 产生某种特定的看似"有意义"的结果, 但这种结果很可能在, 以后别的条件下, 或者别的计算能力的卡上, 变得无意义.
« 最后编辑时间: 四月 12, 2021, 05:20:38 pm 作者 屠戮人神 »