隻讀資料緩存加載函數:
隻讀資料緩存加載功能僅受計算能力3.5和更高的裝置支援:
傳回位于位址位址處的類型T的資料,其中T為char,short,int,long long unsigned char,unsigned short,unsigned int,unsigned long long,int2,int4,uint2,uint4,float,float2,float4,double ,或double2。 該操作緩存在隻讀資料緩存中(請參閱全局記憶體)。
時間函數:
當在裝置代碼中執行時,傳回每個時鐘周期遞增的每多處理器計數器的值。 在核心的開始和結束時對該計數器進行采樣,取出兩個采樣的內插補點,并記錄每個線程的結果,為每個線程提供一個度量,以便裝置完成執行線程所花費的時鐘周期數, 但不是裝置實際執行線程指令所用的時鐘周期數。 由于線程是時間分片的,是以前者的數字大于後者。
原子操作函數:
原子函數對駐留在全局或共享記憶體中的一個32位或64位字進行讀 - 修改 - 寫原子操作。 例如,atomicAdd()在全局或共享記憶體中的某個位址處讀取一個字,向其中添加一個數字,并将結果寫回到相同的位址。 該操作是原子的,因為它保證在沒有其他線程幹擾的情況下執行。 換句話說,除非操作完成,否則其他線程無法通路此位址。 原子函數不會作為記憶體隔離,也不意味着記憶體操作的同步或排序限制(有關記憶體隔離的更多詳細資訊,請參閱記憶體隔離函數)。 原子功能隻能用于裝置功能。
在計算能力低于6.x的GPU架構上,從GPU完成的原子操作僅針對該GPU而言是原子的。 如果GPU嘗試對對等GPU的記憶體進行原子操作,則該操作将顯示為正常讀取,然後寫入對等GPU,并且這兩個操作不會作為單個原子操作完成。 同樣,從CPU啟動的原子操作,從GPU到CPU存儲器的原子操作不會是原子操作。
計算能力6.x引入了新的原子類型,允許開發者擴大或縮小原子操作的範圍。 例如,atomicAdd_system保證該指令對于系統中的其他CPU和GPU是原子的。 atomicAdd_block意味着該指令隻針對來自同一線程塊中其他線程的原子的原子。 在以下示例中,CPU和GPU都可以自動更新位址addr處的整數值:
原子的新範圍版本可用于下面列出的所有原子,僅用于計算能力6.x及更高版本。
請注意,任何原子操作都可以基于atomicCAS()(Compare和Swap)來實作。 例如,雙精度浮點數的atomicAdd()在計算能力低于6.0的裝置上不可用,但可以按如下方式實作:
