超线程是英特尔Pentium 4及其以后的处理器具有的一项新功能。超线程计算机只有一个处理器,但能象具有多处理器的计算机一样运行。在超线程计算机上打开Windows任务管理器,单击性能,任务管理器将显示两个CPU的使用情况。
超线程处理器就象在同一个芯片上嵌入了多个处理器。芯片上有的资源是重复的,如寄存器;有的资源则是共享的,如执行单元和缓存。某些资源如存储微指令的缓冲区被分成几部分,每个逻辑处理器占用其中的一部分。
利用超线程技术优化应用程序与在多处理器系统上优化应用程序相似,但两者之间也有些差异。例如,超线程计算机共享执行单元,而一个双处理器的计算机则包含两套完整的执行单元。因此,所有受浮点运算执行单元限制的程序在多处理器计算机上能获得更优的性能,因为处理器无须共享执行单元。对缓存而言也是如此。如使用两条线程访问缓存,多处理器计算机的速度更快。因为多处理器计算机上的每个处理器都有其完整的缓存。
LabVIEW运行系统支持多处理技术。在基于文本的传统编程语言中,如要创建多线程应用程序,必须先创建多个线程,然后编写代码使线程间相互通信。LabVIEW能判断VI中使用多线程技术的必要性,由运行系统自动为用户处理多线程通信。
下例说明了如何利用LabVIEW多线程运行系统。
MSITStore:\rogram%20Files\National%20Instruments\LabVIEW%208.2ch\help\lvconcepts.chm::/loc_bd_twoloops.gif">
在该VI中,LabVIEW发现可在多处理和超线程环境下独立运行两个循环,通常是同步运行。
下例用于计算所有大于2的质数。
MSITStore:\rogram%20Files\National%20Instruments\LabVIEW%208.2ch\help\lvconcepts.chm::/loc_bd_primesoneloop.gif">
程序框图检查所有3到Num Terms之间的奇数并确定这些数字是否为质数。如果该数能被某个数整除,则内部For循环将返回TRUE。
内部For循环中没有任何输入输出或等待函数,因此计算强度较大。这样的架构没有充分利用LabVIEW中的并行执行功能。循环中的每个操作都按照既定顺序进行。数据流决定了运行顺序,每步操作都必须等待数据输入之后才能运行,所以不能采用任何其它顺序。
可在该VI中引入并行机制。并行功能要求每个循环都不依赖与任何其它循环。只要满足这一条件,就能在两个循环中分配迭代。但是,LabVIEW也有其限制,即每次循环必须在前一次循环完成之后才能开始。如循环没有上述限制,则可将进程分为两个循环来运行。
以下的质数并行操作范例将操作分为两个循环。上面的循环检查其中一半奇数,下面的循环检查另一半。在多处理器计算机中,双循环处理办法更为有效,因为LabVIEW可同时执行两个循环中的代码。注:与上例不同的是,该VI的输出端口有两个数组,而不是一个。可编写一个子VI将两个数组合并,因为计算本身将消耗绝大部分时间,所以程序后半部分额外的VI几乎可忽略不计。
MSITStore:\rogram%20Files\National%20Instruments\LabVIEW%208.2ch\help\lvconcepts.chm::/loc_bd_primestwoloops.gif">
请注意以上两例中的VI都不包含单独的线程管理代码。LabVIEW采用数据流编程框图,使LabVIEW运行系统在不同的线程中运行两个循环。而在很多基于文本的传统编程语言中,必须单独创建并处理线程。
文章评论(0条评论)
登录后参与讨论