cuda程式設計初探

2021-06-12 01:37:45 字數 1197 閱讀 6937

指標有了一點心得,定義跟使用是有區別的,其實指標就是乙個位址變數,定義指標的時候會加乙個「 * 」,使用的時候,*p是指指標p指向的那個值,p就為位址。當然可以定義多重指標,原理都是一樣。指標從根本上來說就是一種索引的概念,從這個意義上說,將陣列理解成乙個指標就好理解了,a[i]中i表示索引,a[i]表示指向的那個值,a在記憶體中作為乙個位址標識,是這個陣列的首位址,a+i就表示第(i-1)個元素的位址。另外,陣列是同一型別資料的集合,通過陣列這種資料結構方便資料的讀取和使用,各個元素訪問在記憶體中連續區域,不能設定成register型別。不同型別資料的聚集則採用結構體的形式。

讀入檔案中資料,資料檔案可定義為.dat,.txt。通過定義的指標的移動來逐個讀取資料,從左到右,由上到下,讀取完乙個資料之後指標自動移動到下乙個資料的位置,fopen函式用來開啟乙個檔案,其呼叫的一般形式為:

檔案指標

名=fopen(檔名,使用檔案方式);

其中,「

檔案指標

名」必須是被說明為file 型別的

指標變數

;「檔名」是被開啟檔案的檔名;

「使用檔案方式」是指檔案的型別和操作要求。

「檔名」是

字串常量

或字串陣列。

例如:file *fp;

fp=fopen("file a","r");

其意義是在

當前目錄

下開啟檔案file a,只允許進行「讀」操作,並使fp指向該檔案。

處理device中對host函式呼叫問題,global函式可以與host,device互動;device函式只能在gpu上執行,作用範圍也只是在gpu中,其中定義的變數為device中的變數,如果此函式需要呼叫其他函式,則被呼叫的函式必須同為device型別。若被呼叫函式為host函式,則一種辦法可以將其定義為__device__型別,如果需要乙個返回值的話另一種辦法通過__global__函式,動態分配一塊空間,將返回值傳輸到device中。不搞清楚各個變數和函式的作用範圍,編譯器會找不到某個變數或不允許對不合法的函式進行呼叫。

函式的呼叫,普通變數(值傳遞)與指標變數(位址傳遞)的區別,在普通變數中交換形參不會改變實參的值,而使用指標變數則可以達到交換實參的作用,c語言教材有具體的示例對比。

隨機數的讀取,種子seed不改變,隨機數的值不會改變。srand(time(0)),是跟時間相關的隨機數,但需要#include time.h,若要產生某個範圍的隨機數,使用「/」與「%」的搭配。

CUDA學習(四)初探

cuda核函式與執行時引數 核函式是gpu每個thread上執行的程式。必須通過 gloabl 函式型別限定符定義。形式如下 global void kernel param list 核函式只能在主機端呼叫,呼叫時必須申明執行引數。呼叫形式如下 ernel dg,db,ns,s param lis...

GPU程式設計自學3 CUDA程式初探

3.1 主機與裝置 通常將cpu及其記憶體稱之為主機,gpu及其記憶體稱之為裝置。如下圖所示,新建乙個nvidia cuda工程,並命名為 1 helloworld 之後發現專案裡多了乙個 kernel.cu 的檔案,該檔案內容是乙個經典的向量相加的gpu程式。可以暫時全部注釋該 並嘗試編譯執行下面...

CUDA程式設計

cuda目前支援linux和windows作業系統。進行cuda開發需要依次安裝驅動 toolkit sdk三個軟體。在 安裝目錄 c src目錄下有很多的例程可以進行學習。cuda 的核心有三個重要抽象概念 執行緒組層次結構 共享儲存器 遮蔽同步 barrier synchronization 可...