裝置執行時元件僅可用於裝置函式。
1.數學函式
裝置執行時元件中存在準確性略低而速度更快的版本;其名稱相同,但帶有乙個
_字首(如
_sinf(x)
)。編譯器有乙個
(-use_fast_math)
選項,用於強制要求所有函式編譯其準確性略低的版本(如果存在)。
2.同步函式
void __syncthreads();
同步塊中的所有執行緒。一旦所有執行緒均達到此同步點,執行將正常恢復。
_syncthreads()
用於調整同乙個塊的執行緒之間的通訊。在乙個塊內的某些執行緒訪問共享或全域性儲存器中的相同位址時,部分訪問操作可能存在寫入後讀取、讀取後寫入或寫入後寫入之類的風險。可通過在這些訪問操作間同步執行緒來避免這些資料風險。
_syncthreads()
允許在條件**中使用,但僅當條件估值在整個執行緒塊中都相同時才允許使用,否則**執行將有可能掛起,或者出現意料之外的***。
3.紋理函式
來自線性儲存器的紋理
:對於來自線性儲存器的紋理,通過
tex1dfetch()
系列函式訪問紋理,示例如下:
template
type tex1dfetch(
texturetexref,
int x);
float tex1dfetch(
texturetexref,
int x);
float tex1dfetch(
texturetexref,
int x);
float tex1dfetch(
texturetexref,
int x);
float tex1dfetch(
texturetexref,
int x);
這些函式會使用紋理座標
x 獲取繫結到紋理參考
texref
的線性儲存器區域。不支援紋理過濾和定址模式。對於整型來說,這些函式可選擇將整型轉變為單精度浮點型別。
除了上述函式以外,還支援
2 元組和
4 元組,示例如下:
float4 tex1dfetch(
texturetexref,
int x);
以上示例將使用紋理座標
x 獲取繫結到紋理參考
texref
的線性儲存器。
來自cuda
陣列的紋理:
對於來自
cuda
陣列的紋理,可通過
tex1d()
、tex2d()
、tex3d()
訪問紋理:
template
type tex1d(texturetexref,
float x);
template
type tex2d(texturetexref,
float x, float y);
template
type tex3d(texturetexref,
float x, float y, float z);
這些函式將使用紋理座標x、
y 和z 獲取繫結到紋理參考
texref
的cuda
陣列。紋理參考的不變(編譯時)和可變(執行時)屬性相互結合,共同確定座標的解釋方式、在紋理獲取過程中發生的處理以及紋理獲取所提供的返回值。
4.原子函式
原子函式對位於全域性或共享儲存器內的乙個
32 位或
64 位字執行讀取-修改
-寫入原子操作。例如,
atomicadd()
將在全域性或共享儲存器內的某個位址讀取
32 位字,將其與乙個整型相加,並將結果寫回同一位址。之所以說這樣的操作是原子的,是因為它可在不干擾其他執行緒的前提下執行。換句話說,在操作完成中,其他任何執行緒都無法訪問此位址。
原子操作僅適用於有符號和無符號整型(但
atomicexch()
是乙個例外情況,它支援單精度浮點數字)。
CUDA學習之五(通用執行時元件)
主機和裝置函式均可使用通用執行時元件。內建向量型別 char1 uchar1 char2 uchar2 char3 uchar3 char4 uchar4 short1 ushort1 short2 ushort2 short3 ushort3 short4 ushort4 int1 uint1 i...
研磨Flink之執行時元件
一 作業管理器 jobmanager 1 控制乙個應用程式執行的主程序,每個應用程式都會被乙個不同的jobmanager所控制。2 jobmanager會先接收到應用程式,應用程式包括 作業圖 jobgraph 邏輯資料流圖和打包的所有類庫和其他資源的jar包。3 jobmanager會把jobgr...
CUDA中記錄執行時間 GPU端
事件event cudaevent t start,stop cudaeventcreate start cudaeventcreate stop cudaeventrecord start,0 cudaeventrecord stop,0 float costtime cudaeventelaps...