随着多核时代的来临,全新的并行程序架构也应运而生。然而即便是拥有着多核的硬件,软件上的开发依然前路漫漫。分析并行性和针对的并行算法设计极具挑战性,而实现的代码架构同样是艰巨的任务。
作为图形化编程G语言的执行者, Labview 广泛应用于工业界的各个领域。有别于传统的文本编程, Labview
本身就是并行的程序开发结构。根据程序中的数据流分布, Labview
编译器能够自动识别并行模块并创建多线程。这种潜在并行化的多线程会根据程序效率将多线程安排在多核上(如果是多核计算架构体系的话)。
各种编程结构中,循环是最为耗时和消耗资源的。一直运行的循环会让执行的线程负担很重,单个CPU时间将会达到100%,虽然这个循环占用的线程不会始终固定在同一个线程上。
http://s6/middle/5d06e239g9991dfebdab5&690进阶 · 多线程工作" TITLE="LABVIEW 进阶 · 多线程工作" />
http://s5/middle/5d06e239g9991e1492aa4&690进阶 · 多线程工作" TITLE="LABVIEW 进阶 · 多线程工作" />
可以看到,并行排列的循环结构被分配到了不同线程上,并且根据运算量分配到了多核上,每个循环均占用了100%
的CPU时间。但是,占用满CPU的后果是系统对其他线程的反应得不到响应,例如界面的执行线程。因此程序中应当尽量避免CPU满占的情况。即使需要长时间的循环,绝大部分情况下循环中的动作不需要时刻不停的运算,因此添加延时函数或者配合其他程序结构可以有效的降低CPU的占用率。
http://s14/middle/5d06e239gdffb2ee67a0d&690进阶 · 多线程工作" TITLE="LABVIEW 进阶 · 多线程工作" />
利用
Labview
中的定时循环(Timed Loop)结构可以把任务分配到指定的核上。结果表明,在第二颗核上的循环占用了100%
的CPU时间(总占用率25%
),而在指定的第三颗核上,即使是添加1毫秒的延时,都可以把相应CPU的占用率降低下来。
加载中,请稍候......