【并行计算-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 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进行编程,你将会发现要加速你的应用是件多么简单多么快捷的事情。
【并行计算-CUDA开发】FPGA 设计者应该学习 OpenCL及爱上OpenCL的十个理由的更多相关文章
- 【并行计算-CUDA开发】OpenCL、OpenGL和DirectX三者的区别
什么是OpenCL? OpenCL全称Open Computing Language,是第一个面向异构系统通用目的并行编程的开放式.免费标准,也是一个统一的编程环境,便于软件开发人员为高性能计算服务器 ...
- 【DSP开发】【并行计算-CUDA开发】TI OpenCL v01.01.xx
TI OpenCL v01.01.xx TI OpenCL™ Runtime Documentation Contents: Introduction OpenCL 1.1 Reference Mat ...
- 【ARM-Linux开发】【CUDA开发】【深度学习与神经网络】Jetson Tx2安装相关之三
JetPack(Jetson SDK)是一个按需的一体化软件包,捆绑了NVIDIA®Jetson嵌入式平台的开发人员软件.JetPack 3.0包括对Jetson TX2 , Jetson TX1和J ...
- 【并行计算-CUDA开发】从零开始学习OpenCL开发(一)架构
多谢大家关注 转载本文请注明:http://blog.csdn.net/leonwei/article/details/8880012 本文将作为我<从零开始做OpenCL开发>系列文章的 ...
- 【并行计算-CUDA开发】Windows下opencl环境配置
首先声明我这篇主要是根据下面网站的介绍, 加以修改和详细描述,一步一步在我自己的电脑上实现的, http://www.cmnsoft.com/wordpress/?tag=opencl&pag ...
- 【并行计算-CUDA开发】GPGPU OpenCL/CUDA 高性能编程的10大注意事项
GPGPU OpenCL/CUDA 高性能编程的10大注意事项 1.展开循环 如果提前知道了循环的次数,可以进行循环展开,这样省去了循环条件的比较次数.但是同时也不能使得kernel代码太大. 循环展 ...
- 【并行计算-CUDA开发】Apple's OpenCL——再谈Local Memory
在OpenCL中,用__local(或local)修饰的变量会被存放在一个计算单元(Compute Unit)的共享存储器区域中.对于nVidia的GPU,一个CU可以被映射为物理上的一块SM(Str ...
- 【并行计算-CUDA开发】GPU---并行计算利器
1 GPU是什么 如图1所示,这台PC机与普通PC机不同的是这里插了7张显卡,左下角是显卡,在中间的就是GPU芯片.显卡的处理器称为图形处理器(GPU),它是显卡的"心脏",与CP ...
- 【并行计算-CUDA开发】OpenACC与OpenHMPP
在西雅图超级计算大会(SC11)上发布了新的基于指令的加速器并行编程标准,既OpenACC.这个开发标准的目的是让更多的编程人员可以用到GPU计算,同时计算结果可以跨加速器使用,甚至能用在多核CPU上 ...
随机推荐
- 【JZOJ5603】【NOI2018模拟3.27】Xjz
题目描述 给定字符串 S 和 T. 串A和串B匹配的定义改为:存在一个字符的映射,使得A应用这个映射之后等于B,且这个映射必须为一个排列. A=121, B=313,当映射为{1->3, 2-& ...
- 归类常用控件GroupBox、TabControl、Expander
<StackPanel Orientation="Horizontal"> <GroupBox Header="颜色" Margin=&quo ...
- Java当中的基本类型包装类
Java当中的基本类型包装类 01 基本数据类型对象的包装类 **什么是基本数据类型对象包装类呢?**就是把基本数据类型封装成对象,这样就可以提供更多的操作基本数值的功能了. 基本数据类型对象的包装类 ...
- rename、remove
/*** remove.c ***/ #include<stdio.h> int main() { remove("./b.txt"); } 运行结果: ubuntu1 ...
- return返回方法值:狮子玩具
public class Lion { String color ="黄色"; public void run(){ System.out.println("正在以0.1 ...
- jQuery事件之绑定事件
语法: $(selector).bind(eventType[, eventData], handler(eventObject)); 参数解释: eventType(String): 一个包含一个或 ...
- web 新能优化
网上的东西太多了都是搜来的东西 留着自己看吧! 摘自 :http://www.cnblogs.com/50614090/archive/2011/08/19/2145620.html 打开网站慢现状分 ...
- 「CF1105E」Helping Hiasat
题目链接 戳我 \(Solution\) 将好友访问你的主页的状态用二进制存下来 其中若第\(i\)位是\(1\),则表示这个好友在第\(i\)个\(1\)操作后访问了你的主页,否则没访问. 所以如果 ...
- 化学结构SDF文件
参考博客 第一行:一般作为分子名字,如 Levetiracetam 第二行:注释,ChemDraw06111413562D 第三行:一般是空行 第四行:是原子个数 键的个数等的起始行. M END所在 ...
- (十二)C语言之循环结构