新闻中心

EEPW首页 > 测试测量 > 设计应用 > LabVIEW驰骋多核技术时代

LabVIEW驰骋多核技术时代

—— LabVIEW Fitting for Multi-Core Times
作者:周斌 NI技术市场工程师时间:2008-09-19来源:电子产品世界收藏

摘要:本文主要介绍了专门针对应用而优化的全新软件,并详细介绍其开发优势。

本文引用地址:http://www.eepw.com.cn/article/88205.htm

关键词:

时代的编程挑战

  众所周知,由于对芯片功率和热效应的制约,以往单纯通过提高主频来提高处理器运行速度的做法已经不再可行,一个新的架构已经逐渐成型,那就是多核。

  多核时代的来临已成为主流的发展趋势,在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执行器就将自动地实现并行化运行,这种在计算机科学术语中叫做“潜在并行化”(图2)。例如,我们在LabVIEW下创建了多个循环,那么相对应的也就创建了数个新的执行线程,从而这些并行循环就会自动分配成多个线程分到多个处理核上,让LabVIEW开发人员享受到了多核处理器的性能优势。

 


图2 LabVIEW本身就是自动多线程的编程语言

  从单核到双核的处理器,理论上来说,获得的运算性能可以达到原先的两倍。但是,与这个极限值的接近程度取决于用户应用程序并行化运行的程度。使用LabVIEW,我们就可以方便地实现应用程序性能的改进,通过最少的编程调整,并行应用便可以获益于多核处理器。对于普通的LabVIEW应用程序而言,如果不考虑多核编程技巧,在不改写代码的情况下,与最初的基准程序相比,可以获得25%到35%性能上的提升,这也就意味着“免费的午餐”还没有结束。

  下面我们来看图3的简单例子。其中LabVIEW代码中的分支简化了两个分析任务 ——滤波操作和快速傅立叶变换(FFT),使它们可以在双核机器上并行化执行。首先程序在单核的模式下(关闭其中一个核)运行一次,然后在双核模式下运行。从图中可以看到,由于两项任务的计算量都很高,因此利用任务并行化获得的性能改进为原先的1.8倍。

 


图3 LabVIEW数据流编程的并行特性

  Windows操作系统是自动将线程分配到不同的核上,那么对于某些应用,如果有一个对时间要求非常高的线程,那么是否有办法能够保证它执行的确定性呢?

  使用LabVIEW 就可以很好地解决这个问题,从而获得对于多核处理器更多的控制权。在 LabVIEW中,工程师可以根据自身需求手动设置线程运行在特定的核上,例如将时间要求苛刻的采集与控制任务放在单独的核上运行,而将对确定性要求不高的界面响应、数据记录等任务放在另外一个核上运行(图4)。值得一提的是,实现这样的操作非常简单,就像放一个LabVIEW循环一样,只需放置一个定时循环(Timed Loop),再分配那个循环到指定的核上即可。

 


图4 LabVIEW 允许用户手动分配线程在指定的核上运行

  作为一个典型的多核应用案例,德国的Max Planck研究院要实现针对核聚变能源的受控热核反应装置的等离子控制,这种高速控制需要将88个磁感应器上的大量数据转换为64×128个点格上的偏微分方程组,并要在短短的1ms内完成整个计算过程。最终他们使用LabVIEW在一个8核的系统上采用并行技术,将整个系统的运算速度提高了5倍,成功地达到了1ms闭环控制速率的要求,完成了这个“不可能的任务”。

基于LabVIEW的并行编程

  LabVIEW自身所具有的并行特性使得开发人员可以不用花过多的时间放在多线程的创建、管理、同步、调试等底层实现过程上,而可以将主要精力聚焦在整个并行程序的高层架构上,这是能否高效利用多核处理器技术的关键所在。

  本节中将简单介绍针对多核的三种常用编程方式及其在LabVIEW下的实现方式。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭