cuda 函式指標 CUDA常用函式介紹

2021-10-18 18:42:11 字數 1647 閱讀 9755

cudamalloc(void** p, int size):分配size位元組的儲存器,並將其首位址賦給*p,至於引數為什麼是二級指標,可在c語言中找到答案

cudamallochost():這個方法是在主機上分配空間,可以加快傳輸速度,因此在寫cuda時,應該使用此函式取代malloc,引數同上一函式

cudamemcpy(void* dest,void* source,int size,enum direction):copy size data form. source to         dest,direction must be right,you must be careful。關於這個函式要注意的是:如果最後乙個引數的型別不匹配也不會出錯。

cudamemcpytosymbol:將資料複製到__constant__,__device__變數中

cudamemcpyformsymbol: 同上相反

cudathreadsynchronize():強制等待所有在此句之前啟動的runtime 任務完成。其實現方式採用的輪詢。

__syncthreads():此函式用於保證block內所有執行緒都執行到呼叫處,常用它來保證一致性。

c語言申請2維記憶體時,一般是連續存放的。a[y][x]存放在第y*widthofx*sizeof(元素)+x*sizeof(元素)個位元組。 但在cuda的global memory訪問中,從256位元組對齊的位址(addr=0, 256, 512, ...)開始的連續訪問是最有效率的。這樣,為了提高記憶體訪問的效率,有了cudamallocpitch函式。cudamallocpitch函式分配的記憶體中,陣列的每一行的第乙個元素的開始位址都保證是對齊的。因為每行有多少個資料是不確定的,widthofx*sizeof(元素)不一定是256的倍數。故此,為保證陣列的每一行的第乙個元素的開始位址對齊,cudamallocpitch在分配記憶體時,每行會多分配一些位元組,以保證widthofx*sizeof(元素)+多分配的位元組是256的倍數(對齊)。這樣,上面的y*widthofx*sizeof(元素)+x*sizeof(元素)來計算a[y][x]的位址就不正確了。 而應該是y*[widthofx*sizeof(元素)+多分配的位元組]+x*sizeof(元素)。而函式中返回的pitch的值就是widthofx*sizeof(元素)+多分配的位元組。 說明:widthinbytes作為輸入引數,應該是widthofx*sizeof(元素);這樣的話,複製內容時也要作相應的修改。

cuda中的數學函式,普通的和標準c中一樣,如果是對int操作,直接使用本名,如果操作long型別對數,在本名前加l,如果操作雙精度浮點數,在本名前加f,如果操作單精度,在本名前後都加上f,如 max(int,int),lmax(long,long),fmax(double,double),fmaxf(float,float),同時要記住的是:有些函式並沒有某些型別引數存在,也就沒有相應的函式。

向量操作

cuda對於向量在cutil_math.h中過載了很多操作符,如負號,+, -, *(包括向量乘和數乘),/(向量的對應座標相除和數除),+=,-=,*=,lerp(三個引數,含義為求乙個值,使得該值和第乙個引數的距離與每乙個引數和第二個引數的距離的比值是第三個引數,型別於高中的線段的分割點), dot(點乘),length(返回二範數),normalize(對向量進行單位化),rsqrtf(求開方的倒數)

[本帖最後由 yyfn風辰 於 2010-4-21 21:14 編輯]

opencv中常用cuda函式總結

bitwise and bitwise not bitwise or bitwise xor compare divide 除 exp log max min multiply threshold 二值化,但要指定設定閾值 calchist createboxfilter 建立乙個規範化的2d框過濾...

CUDA 二 記憶體分配函式

除了前面提到的記憶體分配函式cudamalloc之外,這裡再簡單的介紹幾個常用的記憶體分配函式 cudamallocpitch cudamalloc3d等。cudaerror t cudamallocpitch void devptr,size t pitch,size t width,size t...

CUDA之同步函式詳解

之前在寫程式的時候,經常用弄混同步函式,現做出總結。syncthreads 執行緒塊內線程同步 保證執行緒會腫的所有執行緒都執行到同一位置 當整個執行緒塊走向同一分支時才可以使用 syncthreads 否則造成錯誤 乙個warp內的執行緒不需要同步 即當執行的執行緒數小於warpsize時,不需要...