• 【并行计算-CUDA开发】FPGA 设计者应该学习 OpenCL及爱上OpenCL的十个理由


    为什么要学习OpenCL呢?就目前我所从事的医疗超声领域,超声前端的信号处理器一般是通过FPGA或FPGA+DSP来设计的,高端设备用的是FPGA+ GPU架构。传统的设计方法是通过HDL语言来进行设计FPGA,通过C或者跟C类似的语言来设计DSP/GPU,使得FPGA与DSP/GPU的算法无法相互移植。

    OpenCL这个语言的好处就是跨硬件平台设计,Altera有专门的SDK大力支持OpenCL,而Xilinx的Vivado HLS也开始初步支持OpenCL,未来通过OpenCL设计FPGA的方法学必定会成熟起来,通过高层次语言设计FPGA的好处多多,在此不一一列举。通过OpenCL设计FPGA结构以及GPU算法,移植性大大增强,设计者可以把更多的精力投入到高层次的算法设计当中而不是拘泥于FPGA繁杂的设计验证。

    目前FPGA的设计语言,常用的大概有VHDL,Verilog/SystemVerilog,System C,Matlab Simulink以及Vivado HLS支持的C/C++,Altera SDK for OpenCL等等,之前一直感觉System C可能会火起来,但是现在应用该语言的设计者相对还是太少,相关设计资料等资源也相对匮乏,无法构成良好的生态圈。而OpenCL有着跨硬件平台的优势,有着更多的用户群,有着更广的技术生态圈,相信未来对于FPGA的设计语言,低层次设计是SystemVerilog的天下,而高层次设计非OpenCL莫属了。

    原创文章,转载请注明,本文链接地址: http://www.elecbio.com/archives/204



    摘要:对于OpenCL用户来说,OpenCL标准的优点和利益是很明显的。我们认为在未来的几十年甚至超过几十年里,OpenCL将会引领计算机软件行业。

    作为OpenCL CodeBench的开发者,Amdahl软件公司始终坚信OpenCL能够带来巨大的利益,也从未怀疑过OpenCL标准的成功性。现在人们对计算性能的要求越来越高,在不超过发热量和功耗的限制范围,我们相信多核和多核系统提供了一个可行的解决方法。对于OpenCL用户来说,OpenCL标准的优点和利益是很明显的。我们认为在未来的几十年甚至超过几十年里,OpenCL将会引领计算机软件行业。

    下面是我们为什么觉得OpenCL强大的最重要的10个理由。

    1-OpenCL可以为代码加速10倍甚至更多

    现在许多的嵌入式或者桌面计算平台在主板上都有GPU。但是,大部分时间GPU都是闲置的,除非该计算平台正在运行图形敏感的工作。通过利用空闲的GPU的计算能力,你可以加速代码的运行。假如你的算法本身就是并行的,那么利用GPU可以加速的更多。对于分子动力学模拟,甚至电子电路,实时视频处理,图像处理,图像增强,移动侦测,财务分析和自动交易等方面的应用特别适合利用GPU来进行加速。

    GPU并不是唯一可以利用OpenCL加速的设备。如果你的主机平台有多个CPU核——而且现在越来越多的台式电脑拥有四个核或者更多的核——在这种情况下你同样可以使用OpenCL进行CPU的多核编程。利用OpenCL进行CPU多核编程可能达不到利用GPU加速的效果,但这取决于加速的算法,不过随着CPU核数的增加性能也会随之提高。

    2-OpenCL是一个开放标准

    OpenCL是一个开放的标准意味着该标准对于所有使用OpenCL的人来说都是免费的,开放的。OpenCL有一系列高品质的文档,包括在线教程、编程指南和参考手册。除此之外,我们还可以找到很多关于的OpenCL的开源工具和出版的书籍,而且我们还可以利用互联网找到很多的使用案例和设计实例。

    3-OpenCL可以降低功耗

    现在存在很多的工业例子证明对加速器的使用可以降低系统能耗。Amdahl软件公司在不久的将来会出版一本白皮书,该书使用直接的定量分析的方式表明使用简单的CPU+GPU模型来降低功耗的机会。与此同时,Imagination Technologies公司提供的OpenCL视频例子很好的展示了这一点。

    4-OpenCL可以节省你的硬件成本

    对于数字信号处理(DSP),OpenCL提供了一种宽松的浮点实现。如果你的算法不需要绝对的精确,你可以在系统中取消DSP,使用已有的GPGPU代替。

    5-OpenCL正在快速的普及

    这对于桌面和嵌入式世界都是正确的。半导体和IP供应商,像Altera, Apple, AMD, ARM, Freescale, IBM, Imagination, Intel, NVidia, Samsung, STMicroelectronics, Texas Instruments, Vivante, Qualcomm等已经宣布了他们的OpenCL兼容设备。在Khronos的OpenCL兼容产品资料库可以找到完整的兼容设备和驱动清单。随着其他设备兼容性的测试,这个清单会迅速扩大。通过使用OpenCL,现在越来越多的库和最终用户应用正在被移植到OpenCL平台,以利用GPGPU的加速能力。OpenCL的使用提高了应用的性能,为最终用户的体验和期望设定了新的标准。

    6-OpenCL可以被用作产生自定义硬件的基础

    OpenCL编程模型在本质上是通过对内核,工作组和工作项的定义来实现并行。在内核中,甚至可以通过使用有着固定的众所周知长度的小型矢量数据类型进行更细粒度的并行度划分。在高效数据访问过程中,OpenCL另外一个重要的组成特性是内核能够通过barrier和memory fence进行同步的能力。所有这些特性使得OpenCL不仅仅适合编程以用来进行软件加速,也适合对自定义硬件加速器实现的定义。Altera公司已经意识到了这一点,它最近发布了一个程序,该程序提供了从OpenCL移植到FPGA的实现方式。

    开发人员的应用程序不再受限于存在的设备。相反,他们可以通过OpenCL定义特定的“co-processor”来进行系统优化,以满足他们的特殊要求(性能,功耗,大小)。设计人员可以在一个已知的并易于调试的环境下开发一个功能全面并已通过测试的的并行应用。一旦完成了代码的编写,影响性能的关键代码部分可以通过FPGA image来进行完美的加速,该FPGA image是程序涉及到的内核直接产生的,这是OpenCL的一个很重要的好处。这促进了一种紧密的集成硬件/软件协同设计方法的行成,在该方法中,同一个基准程序和测试贯穿整个开发过程,这样就加快了应用进入市场的时间。

    7-OpenCL C99语言是基于C语言的

    这是一个不应该被忽略的特性。创建一种全新的编程语言会减慢对OpenCL的采纳速度——尽管它可能会带来巨大的利益。C语言是一种工业标准语言,它是OpenCL的基础。OpenCL kernel定义语言是对C99的扩展,简单易于接受。对于会使用C编程的工程师来说,能够很快的掌握OpenCL。这样,程序员就可以集中精力在他们想要加速的算法上,而不是OpenCL的语法上。

    8-OpenCL可以被用于各种各样的宿主语言

    OpenCL kernel可以在C , C++, Java, Python, JavaScript, Haskell, Perl, Ruby等宿主语言中调用,而且能够调用OpenCL的语言还在增多。这就使得在不同的开发环境下可以进行OpenCL kernel和结果的移植和复用,使得对GPGPU计算的支持更加灵活。

    9-很容易开始OpenCL

    大部分的PC机都有兼容OpenCL的显卡。如果你的计算系统没有GPU(不太可能的情况),只要你找到相应可用的驱动,你同样可以在CPU上直接运行OpenCL程序。在嵌入式世界中,存在很多支持OpenCL的开发板。许多的GPU供应商除了提供了OpenCL的培训视频和教程,还提供了很多关于OpenCL的应用笔记和示例程序。所以要想开始OpenCL编程是很便宜,很简单的事情。

    10-OpenCL是平台独立的

    OpenCL的编程模型是平台独立的,它能够用来进行异构的多核的软件开发。不同的内存空间定义了一个内存一致的模型。在OpenCL代码运行时,从用户的角度看,低层级的任务例如队列和执行内核是被屏蔽的,是不可见的。在OpenCL中,events,barrier和fences提供了同步的能力。

    OpenCL平台的独立性意味着在不修改代码的前提下就能够让代码在不同的兼容的OpenCL平台上运行。因此,即使在不同的平台运行同一OpenCL代码性能可能会有所不同,但是从一个平台将OpenCL代码移植到另一个平台是很简单的。OpenCL在基于共有系统模型的基础上提供了一个功能性的起点。

    结论

    我们坚信OpenCL潜在的能力。OpenCL使得软件工程师可以有效的利用(易购的)多核计算的能力。不管在什么编程环境下,用来进行开发的工具越好,开发效率就越高,代码的质量就越好。在多核的时代下,我们使用OpenCL CodeBench的目的就是简化OpenCL的开发。OpenCL CodeBench提供了全面的主机代码生成功能,还提供了基于Eclipse的智能便捷的OpenCL kernel编辑器。不要一味的相信我们的话,你可以自己去试试用OpenCL CodeBench进行编程,你将会发现要加速你的应用是件多么简单多么快捷的事情。


  • 相关阅读:
    在非controller中获取HttpServletRequest (如在service中获取)
    office 转 html html 转 office
    firewalld的操作
    centos7 安装jdk,mysql,nginx,redis,zookeeper,activemq
    nginx
    学习网站
    Centos7安装搜狗输入法
    “星期几”不同脚本写法
    正则表达式 exec 获取字符串中的汉字
    js和jquery获取父级元素、子级元素、兄弟元素的方法
  • 原文地址:https://www.cnblogs.com/huty/p/8517951.html
Copyright © 2020-2023  润新知