OPENCL之学习手记(chapter1)

来源:互联网 发布:zaker是什么软件 编辑:程序博客网 时间:2024/06/06 08:59

        由于摩尔定律,处理器的频率会18个月提高一次(这是摩尔定律的一种说法)。处理器架构师就要考虑如何利用这些多出来的频率,还有就是功耗方面的问题。所以就有了多处理架构,以及一些异构结构。cpu搭配gpu或者FPGA。现在AMD的架构就是使用Brook语言处理数据流,后来扩展了SW环境(CTM,close to metal ;CAL,compute abstraction layer)去使用低级的数据流硬件的原语。NVIDA使用CUDA编程环境构建高级线程级环境。INTEL扩展了它的多核处理器去编程Larrabee架构。IBM提议的是一种基于消息传递的软件,为的是使用带有C或C++的VHDL的FPGA架构和非连贯细胞架构。你发现居然都是不一样的架构,这些处理器都有不一样的ISA。不能像Java一样在不同的平台上跑。OPENCL支持不同层次的并行,有效映射到同步或者异步,包括CPU,GPU,FPGA等设备的单或者多设备系统。

        没有一个单独的设备可以对任何应用都处理得好。应用分为control intensive(搜索,排序,解析)和data intensive(图像处理,模拟,建模,数据挖掘)。CI的合适使用CPU,DI的可以用FPGA。任务分配的方法有“divide-and-conquer”和“scatter-gather”。“divide-and-conquer”就是把任务分配给适合它的资源,把大的任务细化;“scatter-gather”就是给并行的每个输入一个数据子集,再输出结果的地方再串行化!



平行:

        传统的并行计算使得程序员的挑战很大,还要考虑底层的硬件,以及具体分配到哪一个处理器。下图是书本截图:说的就是归并排序和点乘的多处理器实现。


        

         现在架构多是CPU和GPU一起的,GPU已经变得十分强大,可以执行CI和DI的部分。对于一个特定的应用的DI和CI称之为kernels,一般会给GPU执行。当GPU执行kernels的时候CPU就会执行非kernels。这就是一种并行计算。对于并行计算的解释就是:a form of computation in which many calculations are carried out simultaneously, operating on the principle that large problems can often be divided into smaller ones, which are then solved concurrently (i.e., in parallel).

     

    在这里对于并行举个例子:C = A * B

具体图如下:

 

    对于图像处理,采用流水线设计:


          对于平行,再举一个例子——字符串比较:这个例子用到了data level parallelisim和task level parallelism。

           对于以上例子我们再进一步,我们就会发现匹配正确之后我们就要计算多少个匹配,然后要把结果相加,这里就又涉及到了一个平行。如下所示:这个概念就叫做reduction。

  

并行:                 

Concurrency is concerned with two or more activities happening at the sametime .

并行和平行程序的关系:


           OPENCL支持共享内存模型。

           OPENCL支持消息传递(MPI,有一个消息传递的中间件)

           Granularity(颗粒度)是计算通信的比例的标度。

      

          写并发软件的时候,数据共享和同步显得非常重要。并发程序中的数据共享有:一个数据的输入是另外一个任务的结果;中间结果需要合并。



注:OPENCL的解释

The Open Computing Language (OpenCL) is a heterogeneous programming framework that is managed by the nonprofit technology consortium Khronos Group.OpenCL is a framework for developing applications that execute across a range of device types made by different vendors. It supports a wide range of levels of parallelism and efficiently maps to homogeneous or heterogeneous,single- or multiple-device systems consisting of CPUs, GPUs, and other types of devices limited only by the imagination of vendors. The OpenCL definition offers both a device-side language and a host management layer for the devices in a system.


参考网站:

http://heterogeneouscomputingwithopencl.org/ for additional information

http://www.khronos.org/opencl

http://www.nvidia.com/object/cuda_home_new.html

http://developer.amd.com/openclzone


0 0
原创粉丝点击