博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【并行计算-CUDA开发】__syncthreads的理解
阅读量:5462 次
发布时间:2019-06-15

本文共 1545 字,大约阅读时间需要 5 分钟。

__syncthreads()是cuda的内建函数,用于块内线程通信.

__syncthreads() is you garden variety thread barrier. Any thread reaching the barrier waits until all of the other threads in that block also reach it. It is

designed for avoiding race conditions when loading shared memory, and the compiler will not move memory reads/writes around a __syncthreads().

其中,最重要的理解是那些可以到达__syncthreads()的线程需要其他可以到达该点的线程,而不是等待块内所有其他线程。

一般使用__syncthreads()程序结构如下:

1 __share__ val[]; 2 ... 3 if(index < n) 4 {     5    if(tid condition)     6     {          7         do something with val;     8     }     9     __syncthreads();    10     do something with val;11     __syncthreads();12 }

这种结构块内所有线程都会到达__syncthreads(),块内线程同步.

1 __share__ val[]; 2 ... 3 if(index < n) 4 {      5     if(tid condition)      6     {           7         do something with val; 8         __syncthreads();       9     }     10     else      11     {         12         do something with val;13         __syncthreads();     14     }15 }

这种结构将块内线程分成两部分,每一部分对共享存储器进行些操作,并在各自部分里同步.这种结构空易出现的问题是若两部分都要对某一地址的共享存储器进行写操作,将可能出

现最后写的结果不一致错误.要让错误不发生需要使用原子操作.

1 __share__ val[]; 2 .... 3 if(index < n) 4 {       5     if(tid condition)       6     {           7         do something  with val;           8         __syncthreads();        9     }      10     do something with val;11 }

这种结构,块内只有部分线程对共享存储器做处理,并且部分线程是同步.那些不满足if条件的线程,会直接执行后面的语句.若后面的语句里面和if里面的语句都对共享存储器的同一

地址进行写操作时将会产生wait forever。若没有这种情况出现,程序则可以正常执行完.

在使用if condition 和__syncthreads(),最好使用第一结构,容易理解,不容易出错~

转载于:https://www.cnblogs.com/huty/p/8517815.html

你可能感兴趣的文章
sql
查看>>
快速排序练习(二)
查看>>
网上见到一同行发的隐私政策 备以后用
查看>>
将响应数据进行压缩处理的过滤器(CompressionFilter)
查看>>
安装Hadoop
查看>>
感性的人最理性,理性的人很感性
查看>>
python
查看>>
乐观复制算法-6 多Master的operation transfer系统
查看>>
ubuntu16.04 安装java
查看>>
矩阵幂求和
查看>>
eclipse下开发一个简单的strom程序
查看>>
MyEclipse快捷键大全
查看>>
net伪静态重写Url
查看>>
Spring和SpringMVC的区别
查看>>
定时器的拓展
查看>>
Java输出文件到本地(输出流)
查看>>
WebService学习记录
查看>>
复习 枚举
查看>>
MATLAB中的运算符和特殊字符说明
查看>>
EX——4 RPG游戏·改 (圣杯战争不完全版)
查看>>