LabVIEW驰骋多核技术时代
摘要:本文主要介绍了专门针对多核应用而优化的全新LabVIEW软件,并详细介绍其开发优势。
关键词:LabVIEW;多核;并行处理;并行编程
多核时代的编程挑战
众所周知,由于对芯片功率和热效应的制约,以往单纯通过提高主频来提高处理器运行速度的做法已经不再可行,一个新的架构已经逐渐成型,那就是多核。
多核时代的来临已成为主流的发展趋势,在2006年的Intel开发者论坛上,Intel的CEO Paul Otellini向全世界展示了一个80核的原型,它可以在一秒内处理数以千兆字节的数据,那是非常惊人的处理能力,并且Intel希望在5年内将其推入消费市场。
然而,这对于工程师和程序员们来说,意味着什么呢?
在以往,程序开发人员们只需换上一块更高计算性能的处理器,就可以在无需任何代码修改的情况下,自动加快了每一行代码的执行速度。然而在如今的多核时代,这样的“免费午餐”已经结束了。如图1所示,即使是在一个4核处理器上,如果其应用只是单线程的话,操作系统仍旧会将所有的任务分配到其中一个核上运行,导致多核处理器无法得到充分的利用。因此,为了充分利用多核处理器,需要有新的编程方法。
图1 单线程编程无法充分利用多核处理器
而这恰恰是一个巨大的编程挑战,针对这个问题,比尔盖茨也说过:“要想充分利用并行工作的处理器威力,……软件必须能够处理并发性问题。但正如任何一位编写过多线程代码的开发者告诉你的那样,这是编程领域最艰巨的任务之一。”
总体而言,多核处理器编程存在以下几大难点:首先是并行的思考方式,比如要分辨出哪些任务是可以同时执行的,这并不是一件容易的事情,尤其对于习惯于顺序结构编程的开发人员来说,思考方式的转变往往需要花相当长的一段时间。
其次是线程的创建和管理。开发人员把任务划分成多个并行步骤之后,就要通过线程的方式来编程实现。事实上,多线程编程是相当困难的,很多传统的编程语言都需要一组新的函数或结构来创建、同步、加解锁线程,这意味着工作量的增加。例如用C++写一个多线程的程序,程序员就必须要非常熟悉C++,了解如何将C++程序分成多个线程和任务间并发的同步,此外还要了解Windows多线程的机制,熟悉Windows API的调用方法,或者MFC的架构等等;在C++上调试多线程程序,更是被许多程序员视为噩梦。
最后,开发人员还需要自己考虑并行代码段之间哪些资源是不能共享的,比如文件、内存、硬件等等,否则会导致资源的冲突和争夺,使得并行线程因等待资源而暂停甚至死锁。
以往基于文本的编程语言,由于其自身是一种顺序的编程模式,因此在对待并行编程时显得有些力不从心。虽然对于一些学习计算机编程或软件工程的专业开发人员来讲,使用文本语言在一个双核处理器中开发并行编程机制可能还不足以被难倒的话,那么当Intel推出80核处理器之后,其编程的复杂度相信任何开发人员都无法应付。因此,工程师和开发人员们都期待着一种更高效、更具创新的并行编程工具,能够协助他们顺利迎接多核时代的到来。
LabVIEW — 天生并行的编程语言
LabVIEW就是这样一种驰骋多核技术时代的编程语言,可以帮助开发人员高效地享用多核技术所带来的益处。
LabVIEW是一个基于数据流的图形化开发平台,它提供了直观的图形化编程方式和用户界面。与传统的文本编程相比,LabVIEW天生就是一种并行结构的编程语言。基于LabVIEW的数据流特性,如果连线中存在着分支,或者是框图中有着并行序列,那么后台的LabVIEW执行器就将自动地实现并行化运行,这种在计算机科学术语中叫做“潜在并行化”(图2)。例如,我们在LabVIEW下创建了多个循环,那么相对应的也就创建了数个新的执行线程,从而这些并行循环就会自动分配成多个线程分到多个处理核上,让LabVIEW开发人员享受到了多核处理器的性能优势。
图2 LabVIEW本身就是自动多线程的编程语言
从单核到双核的处理器,理论上来说,获得的运算性能可以达到原先的两倍。但是,与这个极限值的接近程度取决于用户应用程序并行化运行的程度。使用LabVIEW,我们就可以方便地实现应用程序性能的改进,通过最少的编程调整,并行应用便可以获益于多核处理器。对于普通的LabVIEW应用程序而言,如果不考虑多核编程技巧,在不改写代码的情况下,与最初的基准程序相比,可以获得25%到35%性能上的提升,这也就意味着“免费的午餐”还没有结束。
下面我们来看图3的简单例子。其中LabVIEW代码中的分支简化了两个分析任务 ——滤波操作
LabVIEW 多核 并行处理 并行编程 200809 相关文章:
- 基于LabVIEW RT的自定义流程测控系统(10-30)
- 基于LabVIEW的语音分析平台的实现(10-30)
- 基于示波器卡和LabVIEW的马达编码器测试系统(11-06)
- 基于虚拟仪器的网络虚拟实验室构建(11-06)
- 运用LabView控制DS3900串口通信模块(02-02)
- 采用模块化仪器,对新兴音频和视频应用进行测试(02-19)