《GPU高效能程式設計CUDA實戰》學習筆記(五)

2021-07-22 14:29:50 字數 1962 閱讀 9819

add<<>>(dev_a, dev_b, dev_c);

尖括號中:n---開啟了n個執行緒塊;1---每個執行緒塊中建立1個執行緒。

共啟動的執行緒數量:

n個執行緒塊*1個執行緒/執行緒塊 = n個並行執行緒

本節完成上一章相同任務。但執行緒塊中的並行能完成並行執行緒塊無法完成的工作。

1.使用執行緒實現gpu上的向量求和

(1)將所有執行緒放到乙個執行緒塊中

add<<<1,n>>>(dev_a, dev_b, dev_c);
(2)修改索引方法

int tid = threadidx.x;
完整**如下,

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

#define n 10

__global__ void add( int *a, int *b, int *c )

int main( void )

}int main( void )

struct datablock ;

void generate_frame( datablock *d, int ticks )

// clean up memory allocated on the gpu

void cleanup( datablock *d )

int main( void )

__share__ 新增到變數的宣告中,該變數會駐留在共享記憶體中,駐留在物理gpu上。需要同步

dot  product, 也稱內積。將兩個輸入向量中對應元素相乘,再將這些值加起來得到乙個標量輸出值。如,

(x1, x2).(y1, y2) = x1y1 + x2y2

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

#define imin(a,b) (a__shared__ float cache[threadsperblock];

int tid = threadidx.x + blockidx.x * blockdim.x;

int cacheindex = threadidx.x;

float temp = 0;

while (tid < n)

// set the cache values

cache[cacheindex] = temp;

// synchronize threads in this block

__syncthreads();

// for reductions,threadsperblock must be a power of 2// because of the following code

int i = blockdim.x/2;

while (i != 0)

if (cacheindex == 0)

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

}int main( void )

i /= 2;

}

會出現gpu停止響應。因為有些執行緒一直無法執行到,gpu會一直等待下去。。。

#include "cuda.h"

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

#include "../common/cpu_bitmap.h"

#define dim 1024

#define pi 3.1415926535897932f

__global__ void kernel( unsigned char *ptr )

// globals needed by the update routine

struct datablock ;

int main( void )

GPU高效能程式設計CUDA實戰 二

接下來實施 三步走戰略 配置 附加包含目錄 附加庫目錄 以及 附加依賴項 第一步 配置 附加包含目錄 注 對於cuda samples,有的電腦安裝後的路徑會隱藏,我們可以在 開始 按鈕處查詢,見下圖。第二步 配置 附加庫目錄 第三步 配置 附加依賴項 最後,驗證一下配置是否成功。在新建的工程mai...

《GPU高效能程式設計CUDA實戰》學習筆記 1

gpu高效能程式設計cuda實戰 中 整理 gpu高效能程式設計cuda實戰 學習筆記 三 cuda程式設計 gpu架構,由sp,sm,thread,block,grid,warp說起 cuda並行程式設計 gpu程式設計指南 讀書筆記 1 執行緒網格 執行緒塊以及執行緒 sp streaming ...

GPU 高效能程式設計 CUDA 執行緒協作

並行執行緒塊的分解 在向量加法中,為向量中的每乙個元素都啟動乙個執行緒塊 add dev a,dev b,dev c 尖括號中的第乙個引數建立的執行緒塊的數量,第二個引數表示每個執行緒塊中建立的執行緒數量,所以上述啟動的執行緒數量為 n n 1 使用執行緒實現 gpu 上的向量求和 需要修改兩個地方...