2024年4月25日发(作者:盍宛秋)
LabVIEW 对多核 CPU 的支持
以前,在计算机领域有个摩尔定律,是说每一年半,CPU 的主频都会提高一倍。但是近几年这个定律
在CPU主频上已经失效了,我 4 年前用的计算机 CPU 主频是 2G,我前几天换了一台新电脑,CPU 主
频还是 2G。
现在主要两个 CPU 生产商都意识到单纯通过提高处理器主频来提升性能的办法行不通了。他们的新
策略是通过增加 CPU 的内核来提升系统整体性能。
现在双核 CPU 是商用电脑的主流配置,也有高端电脑采用了四核 CPU。Intel 更是宣称他们用不了5
年就会做出有 80 个核的 CPU 来。
多个 CPU 同时工作,效率固然是高。但是,为了充分发挥多核的优势,为了发挥多核的威力,还要
你的软件针对多核进行一定的优化才行。首先,你的程序至少是多线程运行的。
使用常用的文本语言,比如 C++ 编写一个多线程的程序并不是一项简单的工作。除了要非常熟悉 C++
的基本编程方法,程序员还需要了解 Windows 多线程的运行机制,熟悉 Windows API 的调用方法,或者
MFC 的架构等等。在 C++ 上调试多线程程序,更是被许多程序员视为噩梦。
但如果使用 LabVIEW 编写多线程程序,情况就大为不同了。LabVIEW 是自动多线程的编程语言,
LabVIEW 程序员可以不需要了解任何与多线程相关概念与知识。只要他在 VI 的程序框图上,并排放上
两段没有先后关系的代码,LabVIEW 就会自动把这两段代码放在不同的线程中,并行运行。而在多核 CPU
的计算机上,操作系统会自动为这两个线程分配两个 CPU 内核。这样就有效地利用了多核 CPU 可以并
行运算的优势。LabVIEW 的程序员不知不觉中就完成了一段支持多核系统的程序。
有操作系统来分配 CPU 也许效率还不是最高的。
比如我现在有这样一个程序(图1),有数据采集、显示和分析三个模块。三个模块是并行执行的。我的
电脑是双核的,于是操作系统分配 CPU0 先做数据采集,CPU1 先做数据显示,等数据采集做完了,CPU0
又会去做数据处理(图2)。数据处理是个相对任务较为繁重的线程,而电脑一个CPU做数据处理时,另一个
CPU 却空闲在那里。这种负载不均衡就造成了程序对于整体系统的CPU利用率不高。
图1, 2:操作系统为多线程程序自动分配CPU
对于效率要求极为苛刻的程序,还需要更高效的解决方案。LabVIEW 8.5 提供了一种解决方案,就是
利用它的定时结构来有程序员人为指定 CPU 的分配方案。
定时结构包括定时循环结构(Time Loop)和定时顺序结构(Time Sequence),他们的主要用于在程序中精
确的定时执行某段代码,但是在 LabVIEW 8.5 中它们又多了一个新的功能,就是指定结构内的代码运行
在哪一个 CPU 上。在图3中,定时顺序结构左边四边带小爪的黑方块所代表的接线柱就是用来指定哪一个
CPU或CPU内核的。
图3:一个时间数序结构
2024年4月25日发(作者:盍宛秋)
LabVIEW 对多核 CPU 的支持
以前,在计算机领域有个摩尔定律,是说每一年半,CPU 的主频都会提高一倍。但是近几年这个定律
在CPU主频上已经失效了,我 4 年前用的计算机 CPU 主频是 2G,我前几天换了一台新电脑,CPU 主
频还是 2G。
现在主要两个 CPU 生产商都意识到单纯通过提高处理器主频来提升性能的办法行不通了。他们的新
策略是通过增加 CPU 的内核来提升系统整体性能。
现在双核 CPU 是商用电脑的主流配置,也有高端电脑采用了四核 CPU。Intel 更是宣称他们用不了5
年就会做出有 80 个核的 CPU 来。
多个 CPU 同时工作,效率固然是高。但是,为了充分发挥多核的优势,为了发挥多核的威力,还要
你的软件针对多核进行一定的优化才行。首先,你的程序至少是多线程运行的。
使用常用的文本语言,比如 C++ 编写一个多线程的程序并不是一项简单的工作。除了要非常熟悉 C++
的基本编程方法,程序员还需要了解 Windows 多线程的运行机制,熟悉 Windows API 的调用方法,或者
MFC 的架构等等。在 C++ 上调试多线程程序,更是被许多程序员视为噩梦。
但如果使用 LabVIEW 编写多线程程序,情况就大为不同了。LabVIEW 是自动多线程的编程语言,
LabVIEW 程序员可以不需要了解任何与多线程相关概念与知识。只要他在 VI 的程序框图上,并排放上
两段没有先后关系的代码,LabVIEW 就会自动把这两段代码放在不同的线程中,并行运行。而在多核 CPU
的计算机上,操作系统会自动为这两个线程分配两个 CPU 内核。这样就有效地利用了多核 CPU 可以并
行运算的优势。LabVIEW 的程序员不知不觉中就完成了一段支持多核系统的程序。
有操作系统来分配 CPU 也许效率还不是最高的。
比如我现在有这样一个程序(图1),有数据采集、显示和分析三个模块。三个模块是并行执行的。我的
电脑是双核的,于是操作系统分配 CPU0 先做数据采集,CPU1 先做数据显示,等数据采集做完了,CPU0
又会去做数据处理(图2)。数据处理是个相对任务较为繁重的线程,而电脑一个CPU做数据处理时,另一个
CPU 却空闲在那里。这种负载不均衡就造成了程序对于整体系统的CPU利用率不高。
图1, 2:操作系统为多线程程序自动分配CPU
对于效率要求极为苛刻的程序,还需要更高效的解决方案。LabVIEW 8.5 提供了一种解决方案,就是
利用它的定时结构来有程序员人为指定 CPU 的分配方案。
定时结构包括定时循环结构(Time Loop)和定时顺序结构(Time Sequence),他们的主要用于在程序中精
确的定时执行某段代码,但是在 LabVIEW 8.5 中它们又多了一个新的功能,就是指定结构内的代码运行
在哪一个 CPU 上。在图3中,定时顺序结构左边四边带小爪的黑方块所代表的接线柱就是用来指定哪一个
CPU或CPU内核的。
图3:一个时间数序结构