Reduction操作:規約操作就是由多個數生成一個數,如求最大值、最小值、向量點積、求和等操作,都屬于這一類操作。
有大量資料的情況下,使用GPU進行任務并行與資料并行,可以收到可好的效果。
group同步:OpenCL隻提供了工作組内的各線程之間的同步機制,并沒有提供所有線程的同步。提供組内item-work同步的方法:
void barrier (cl_mem_fence_flags flags)
參數說明:cl_mem_fence_flags 可以取CLK_LOCAL_MEM_FENCE、CLK_GLOBAL_MEM_FENCE
函數說明:(1)一個work-group中所有work-item遇到barrier方法,都要等待其他work-item也到達該語句,才能執行後面的程式;
(2)還可以組内的work-item對local or global memory的順序讀寫操作。
如下圖中每個大框表示任務并行、每個group線程;框中的計算是資料并行、每個item-work線程:
作為練習,給出個完整的使用OpenCL計算整數序列求和,在資料并行中使用Local Memory 加速,group組内并行同步使用CLK_LOCAL_MEM_FENCE。
程式執行個體(整數序列求和):
1.核函數(Own_Reduction_Kernels.cl):
2.tool.h 、tool.cpp
3.Reduction.cpp
View Code