我读过有关PTX同步功能的详细信息的https://docs.nvidia.com/cuda/parallel-thread-execution/index.html#parallel-synchronization-and-communication-instructions-bar。
barrier.sync函数中是可能的吗?(例如,我有一个1块的网格,256个线程块。我们将块分成三个条件分支。线程0~ 63进入kernel1,线程64 ~ 127进入内核2,线程128 ~ 255进入内核3,我希望内核2中的线程仅在它们之间同步。因此,如果我使用"namedBarrierSync“函数,而不是上面提到的:"namedBarrierSync( 1,64)”。那么,它是只同步线程64 ~ 127,还是线程0~ 63?以下是代码:
__global__ void test(int num_threads)
{
if (threadIdx.x >= 64 && threadIdx.x < 128)
{
namedBarrierSync(0, num_threads) ;
}
__syncthreads();
}
int main(void)
{
test<<<1, 1, 256>>>(128);
gpuAssert(cudaDeviceSynchronize(), __FILE__, __LINE_);
printf("complete\n");
return 1;
}发布于 2018-12-07 10:16:18
barrier.sync同步到达指定屏障的前两个偏差(计算能力最高可达6.x)或到达指定屏障的前64个线程(对于计算能力7.0以后)。test<<<1, 256>>>(128);的形式启动测试内核。https://stackoverflow.com/questions/53662484
复制相似问题