关闭

OpenCL中亦要注意volatile的使用

标签: buffercuda编译器优化
2164人阅读 评论(2) 收藏 举报
分类:

在OpenCL或CUDA中,对全局共享变量的访问我们往往会忽略掉使用volatile,这在仅对其访问一次的时候不会有问题,但是对这个共享变量变量做第二次访问的话,那么它会被编译器优化,从而得到的一直是第一次被引用时的值。也就是说,其它线程对共享变量的修改,当前线程将不可见。

下面举一个OpenCL的简单的例子来描述这一情况:

 

在以上代码中,如果把volatile去掉,那么线程32到63这一warp将处于死循环。由于之前对flag写了1,因此在后面while(flag == 1);这句执行时,将一直为true;外部对flag的修改,此warp将无法看见。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:349643次
    • 积分:5168
    • 等级:
    • 排名:第5318名
    • 原创:108篇
    • 转载:2篇
    • 译文:22篇
    • 评论:242条
    最新评论