天天看點

GPGPU OpenCL Reduction操作與group同步

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線程:

GPGPU OpenCL Reduction操作與group同步

作為練習,給出個完整的使用OpenCL計算整數序列求和,在資料并行中使用Local Memory 加速,group組内并行同步使用CLK_LOCAL_MEM_FENCE。

程式執行個體(整數序列求和):

1.核函數(Own_Reduction_Kernels.cl):

2.tool.h 、tool.cpp

3.Reduction.cpp

GPGPU OpenCL Reduction操作與group同步
GPGPU OpenCL Reduction操作與group同步

View Code

繼續閱讀