OpenCL中亦要注意volatile的使用

2021-05-24 02:25:09 字數 300 閱讀 3773

在opencl或cuda中,對全域性共享變數的訪問我們往往會忽略掉使用volatile,這在僅對其訪問一次的時候不會有問題,但是對這個共享變數變數做第二次訪問的話,那麼它會被編譯器優化,從而得到的一直是第一次被引用時的值。也就是說,其它執行緒對共享變數的修改,當前執行緒將不可見。

下面舉乙個opencl的簡單的例子來描述這一情況:

在以上**中,如果把volatile去掉,那麼執行緒32到63這一warp將處於死迴圈。由於之前對flag寫了1,因此在後面while(flag == 1);這句執行時,將一直為true;外部對flag的修改,此warp將無法看見。

set中要注意的問題

include include includeusing namespace std seta set iterator it,it1 int main else i 0 for it a.begin it a.end it cout endl set中若erase了迭代器,迭代器就消失了,因此我用...

angular中要注意的指令

1.ng repeat 遍歷集合,給每個元素生成模板例項,每個例項的作用域中可以用一些特殊屬性,如下 1 index 遍歷集合的下標 2 first 遍歷集合中的第乙個物件 3 last 遍歷集合中的最後乙個物件 4 middle 遍歷集合第乙個和最後乙個之間的物件 5 even 遍歷集合的偶數物件...

Ajax中要注意的問題

ajax呼叫的返回資料會被快取,呼叫靜態html 即使把html修改了,ie依有可能然用原來的資料顯示。而firefox可以正常顯示新的資料。解決辦法 prototype的get中,設定 pars mod readarticle fid f fid rand math.random 使用j a提供的...