CUDA常用函式介紹
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內所有執行緒都執行到呼叫處,常用它來保證一致性。
cudaMallocPitch(void**,int*,widthInBytes,height):這個函式是線上性記憶體中分配二維陣列,因此在使用時,還是用一維的方式使用。注意,width的單位是位元組,而height單位是資料型別,而第二個引數的含義下面一段話說明了。
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 編輯 ]
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內所有執行緒都執行到呼叫處,常用它來保證一致性。
cudaMallocPitch(void**,int*,widthInBytes,height):這個函式是線上性記憶體中分配二維陣列,因此在使用時,還是用一維的方式使用。注意,width的單位是位元組,而height單位是資料型別,而第二個引數的含義下面一段話說明了。
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 編輯 ]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23057064/viewspace-660373/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- cuda函式庫介紹函式
- oracle常用函式介紹Oracle函式
- CUDA 常用的函式函式
- 網路常用函式介紹函式
- php常用Stream函式集介紹PHP函式
- EXCEL常用函式介紹(1)(轉)Excel函式
- Hive的基本介紹以及常用函式Hive函式
- javascript匿名函式常用呼叫方式介紹JavaScript函式
- einsum函式介紹-張量常用操作函式
- Python的常用內建函式介紹Python函式
- jQuery常用的動畫函式簡單介紹jQuery動畫函式
- 介紹4個大神常用而你不常用的python函式Python函式
- ORACLE函式介紹Oracle函式
- TypeScript 函式介紹TypeScript函式
- Tensorflow教程(2)Tensorflow的常用函式介紹函式
- Python資料分析--Numpy常用函式介紹(2)Python函式
- Python資料分析--Numpy常用函式介紹(3)Python函式
- cuda 核函式函式
- MySQL5.6中的常用函式詳細用法介紹MySql函式
- CUDA記憶體介紹記憶體
- 機器學習基本函式介紹機器學習函式
- replaceChild()函式用法介紹函式
- lpad函式介紹函式
- oracle REPLACE 函式 介紹Oracle函式
- oracle 日期函式介紹Oracle函式
- Trim() 函式的介紹函式
- GCD、dispatch 函式介紹GC函式
- 【函式】Oracle TRIM函式語法介紹函式Oracle
- 函式表示式和函式宣告簡單介紹函式
- 【重溫基礎】JS中的常用高階函式介紹JS函式
- Dart建構函式介紹Dart函式
- javascript函式中with的介紹JavaScript函式
- funclib函式庫介紹函式
- Oracle 的基本函式介紹Oracle函式
- prototype.js函式介紹JS函式
- Python資料分析--Numpy常用函式介紹(5)--Numpy中的相關性函式Python函式
- Python資料分析--Numpy常用函式介紹(7)--Numpy中矩陣和通用函式Python函式矩陣
- Signal ()函式詳細介紹 Linux函式函式Linux