CUDA 基本知識點

2021-09-10 23:52:23 字數 1631 閱讀 5191

在gpu裝置上執行的函式通常稱為核函式(kernel)__global__編譯器將告訴編譯器:函式應該編譯為在裝置而不是主機上執行。(將主機**傳送到乙個編譯器,將裝置**傳送到另乙個編譯器。程式設計師一定不能在主機**中對cudamalloc()返回的指標進行解引用。主機**絕對不可以使用這個指標來讀取或者寫入記憶體。可以將cudamalloxc()分配的指標傳遞給在裝置上執行的函式、可以在裝置**中使用cudamalloc()分配的指標進行記憶體讀/寫操作、可以將cudamalloc()分配的指標傳遞給在主機上執行的函式、不能在主機**中使用cudamalloc()分配的指標進行記憶體讀/寫操作。

由3可知不能使用標準c的free()函式來釋放cudamallioc分配的記憶體,需要呼叫cudafree(),訪問裝置記憶體的兩種最常見方法——在裝置**中使用裝置指標以及呼叫cudamemcpy()。總的來說,主機指標只能訪問主機**中的記憶體,而裝置指標也只能訪問裝置**中的記憶體。__syncthreads();                          //對執行緒中的執行緒進行同步

threadidx.x

blockidx.x

blockdim.x

griddim.x

//執行緒格中有執行緒塊,執行緒塊中有執行緒,griddim和blockdim分別是執行緒格和執行緒塊的常數,表明矩陣的維度屬性。

//在多cpu或多核版本中,用while迴圈對資料進行迭代的數量不是1,而是cpu的數量,在gpu中也可以使用相同的辦法,迭代的數量改為並行執行緒的數量。

//int offset =x + y * blockdim.x * griddim.x              //執行緒塊和執行緒二維分布,講執行緒的id進行一維線性化。

//將cuda c的關鍵字__shared__新增到變數宣告中,將使這個變數駐存在此程序塊的共享記憶體中,此執行緒塊的每個執行緒都共享這個變數。能夠實現乙個執行緒塊上的執行緒通過這個變數進行通訊和協作。

#include "../common/book.h"

#define imin(a,b) (aconst int n=33*1024; //匯流排程數

const int threadsperblocks=256; //值大於每個執行緒塊內的執行緒數

__global__ void dot(float *a,float *b,float *c)

cache[cacheindex] = temp //設定cache相應位置上的值

//對執行緒塊中的執行緒進行同步

__syncthreads();

int i=blockdim.x / 2; //進行歸約運算

while(i!=0)

if(cacheindex == 0)

c[blockidx.x] = cache[0];

}

基本知識點

1 程序和執行緒的關係 1 在有執行緒的作業系統裡面,程序是分配資源的基本單位,執行緒是排程的基本單位。2 1個程序可以擁有多個執行緒 3 執行緒同時也有一些自己的資源,包括 程式計數器,堆疊等 4 因為執行緒所擁有的資源比較少,因此進行排程的時候所消耗的資源就少。5 執行緒共享程序的 段,程序的一...

基本知識點

dram 動態隨機訪問儲存器 dynamic random access memory 隨機訪問的意思是,訪問任何乙個記憶體單元的速度和它的位置 位址 無關,讀寫位址0x00001和0xffff0所需要的事件是一樣的。rom 唯讀儲存器 read only memory 它的內容是預先寫入的,掉電也...

PHP基本知識點

1.http協議中幾個狀態碼的含義 503 500 401 200 301 302。http狀態碼 1 請求收到,繼續處理 2 操作成功收到,分析 接受 3 完成此請求必須進一步處理 4 請求包含乙個錯誤語法或不能完成 5 伺服器執行乙個完全有效請求失敗 500 伺服器產生內部錯誤 501 伺服器不...