本文只对专题二的LabVIEW 编程技巧下的“多核技术下LabVIEW编程的参考模式”做一些讨论。对这个问题的心得,是我在本届NIDays上最大的收获之一。
现在我们使用的处理器很多已经是双核了,这就意味着我们写应用程序的时候得考虑怎样充分的使用双核这个特性来优化程序,同时,我们也得考虑由双核所带来的抢资源,死锁等并发问题。但正如任何一位便写过多线程代码的开发者告诉我们的那样,这是编程领域的最艰巨的任务。
LabVIEW是门图形语言,它是基于数据流的多线程的语言,所以编写多线程的程序是一件非常容易的事情,比如图(1):
在这个程序中,独立的任务是自动进行并行的运行。从表面上看来,它的执行过程是同步的。从cpu的执行过程来看就不一定完全同步了。当cpu只是单核的情况下,cpu在执行这段程序的时候,其实是分了三个线程在执行的。也就是说,除非在cpu是3核,或是3个单核cpu的情况下,这段程序才可以真真的是“完全的”同时执行。
很多人做的程序遇到过流水线模式,例如:数据采集,分析与记录。当只是单核的时候,程序如图(2)所示:
但是当我们的CPU的core大于4时,我们就可以做成图(3)的模式了。
每个Step使用的数据是由前一个Step在上一次Loop中生成的。在这个模式中,我们得注意的有一下几点:
1)在程序开始和结束时,4各模块的处理,因为当第一次循环的时候,只有完成了step1 “采集”的工作,而下面的step2,step3,step4由于没有数据输入而没有执行。一直到第四次循环的时候,4个step才同时开始正常执行;同理,再结束循环的时候,采集结束了,可是下面的是step2,step3,step4还没有完成相应的处理。所以开头结尾的地方得进行特别的处理。
2)当CPU没有达到4核的情况下,该程序在执行的过程中会出错,比如双核,每次只能处理其中的2个step,不能同时处理4个,在进行一次loop的时候,不能保证4个step产生新的数据,也不能保证上个loop产生的数据在这次loop都能进行处理。
在程序中涉及到多线程的时候,得考虑到该计算机中core的数量,资源利用及程序开始和结束时相应的处理。
本文只对专题二的LabVIEW 编程技巧下的“多核技术下LabVIEW编程的参考模式”做一些讨论。对这个问题的心得,是我在本届NIDays上最大的收获之一。
现在我们使用的处理器很多已经是双核了,这就意味着我们写应用程序的时候得考虑怎样充分的使用双核这个特性来优化程序,同时,我们也得考虑由双核所带来的抢资源,死锁等并发问题。但正如任何一位便写过多线程代码的开发者告诉我们的那样,这是编程领域的最艰巨的任务。
LabVIEW是门图形语言,它是基于数据流的多线程的语言,所以编写多线程的程序是一件非常容易的事情,比如图(1):
在这个程序中,独立的任务是自动进行并行的运行。从表面上看来,它的执行过程是同步的。从cpu的执行过程来看就不一定完全同步了。当cpu只是单核的情况下,cpu在执行这段程序的时候,其实是分了三个线程在执行的。也就是说,除非在cpu是3核,或是3个单核cpu的情况下,这段程序才可以真真的是“完全的”同时执行。
很多人做的程序遇到过流水线模式,例如:数据采集,分析与记录。当只是单核的时候,程序如图(2)所示:
但是当我们的CPU的core大于4时,我们就可以做成图(3)的模式了。
每个Step使用的数据是由前一个Step在上一次Loop中生成的。在这个模式中,我们得注意的有一下几点:
1)在程序开始和结束时,4各模块的处理,因为当第一次循环的时候,只有完成了step1 “采集”的工作,而下面的step2,step3,step4由于没有数据输入而没有执行。一直到第四次循环的时候,4个step才同时开始正常执行;同理,再结束循环的时候,采集结束了,可是下面的是step2,step3,step4还没有完成相应的处理。所以开头结尾的地方得进行特别的处理。
2)当CPU没有达到4核的情况下,该程序在执行的过程中会出错,比如双核,每次只能处理其中的2个step,不能同时处理4个,在进行一次loop的时候,不能保证4个step产生新的数据,也不能保证上个loop产生的数据在这次loop都能进行处理。
在程序中涉及到多线程的时候,得考虑到该计算机中core的数量,资源利用及程序开始和结束时相应的处理。
举报