cuda主函式
void floodfillwithgpu( uchar * mat_data, int rows, int cols, int startx, int starty,int randr,int randg,int randb)
cudastatus = cudamalloc((void**)&gpu_mat_state, rows * cols );
if (cudastatus != cudasuccess)
cudastatus = cudamemcpy(gpu_mat_data,mat_data,
rows * cols * 3,
cudamemcpyhosttodevice);
if (cudastatus != cudasuccess)
kernel << < 1, threadsperblock >> > (gpu_mat_data, gpu_mat_state, startx, starty, rows, cols, randr, randg, randb);
cudastatus = cudamemcpy(mat_data, gpu_mat_data,
rows * cols * 3,
cudamemcpydevicetohost);
if (cudastatus != cudasuccess)
err:
cudafree(gpu_mat_data);
cudafree(gpu_mat_state);
}
核函式
__global__ void kernel(unsigned char* mat_p, unsigned char* state_p, int startx, int starty , int rows, int cols, int randr, int randg, int randb)
else
offset += blockdim.x;
}if (threadidx.x == 0)
__syncthreads();
while (need_continue)
state_p[offset ] = 2;
if (offset % cols == 0)
else if (offset / cols == rows -1 )
else
}else if (offset % cols == cols - 1)
else if (offset / cols == rows - 1)
else
}else if (offset / cols == 0)
else if (offset / cols == rows - 1)
else
}offset += blockdim.x;
}__syncthreads();
if (threadidx.x == 0)
else
}__syncthreads();}}
上色函式
__device__ void deal( int new_offset, unsigned char* mat_p, unsigned char* state_p,int r,int g,int b, int randr, int randg, int randb) }}
因為並行處理的存在,所以在處理塊狀區域時使用cuda比傳統cpu演算法快上不少。但對於細長條形的區域,此cuda法將比傳統cpu演算法慢上不少。當處理的區域為塊狀區域時(如下圖)
種子點取紫色區域中心時,此cuda演算法需15ms左右,傳統cpu演算法需110ms左右
種子點取藍色區域紅色『+』位置時,此cuda演算法需50ms左右,傳統cpu演算法需100ms左右
而當填充這種細長條形區域時,此cuda演算法需1s左右,而傳統cpu演算法僅需110ms左右
而當填充上圖橙紅色區域時(上圖橙紅色區域為迷宮的『路』,是完全連通的),對於這種既細長又有一定的寬度的圖形,種子點選取為左上角圓形迷宮外藍色『+』處。此時此cuda演算法需1150ms左右,傳統cpu演算法需1200ms左右。
Python學習記錄 用turtle庫繪製箭靶
思想 繪製乙個包含9個圓心的靶盤,要求最內層的圓為紅色,最外三層為黃色,其餘層為金色,所有線條為黑色 繪製箭靶 import turtle turtle.setup 設定視窗 turtle.pencolor black 設定筆的顏色為黑色 list yellow gold red 定義乙個列表,存放...
C 學習記錄(26)泛型(1)
首先介紹泛型的概念,先學習泛型的抽象術語,因為學習泛型的概念對高效使用它是至關重要的。日常生活中經常用到一些文件模板,它的格式已經寫好,我們只需要填入姓名 日期等資訊即可使用。泛型是c 乙個非常重要的特性,通過這個技術,我們可以定義像文件模板一樣的類模板。static void main strin...
C 學習記錄(27)泛型(2)
system.collections.generics命名空間 list和 dictionary兩種型別。1.list list泛型集合型別更加快捷 更易於使用 這樣,就不必像上一章那樣,從collectionbase中派生乙個類,然後實現需要的方法。listmycollection new lis...