LabVIEW 如何处理多处理和多线程?
How Does LabVIEW Handle Multiprocessing and Multithreading?
简介
multiprocessing =使用多个CPU核心来完成一个任务(每个核心都有独立的内存,因此需要每个核心的管道和数据结构"talk" 彼此”)
多线程 = 使用多个线程(在单个 CPU 核心上)和任务调度程序来完成任务(所有线程在 CPU核心)
静态(时间)多线程 - 利用空闲 I/O 时间,通过安排任务按顺序发生而不会在缓存未命中期间暂停(即等待read/write 到 I/O 设备);用于I/O绑定任务
动态(同步)多线程 - 利用可以同时发生的指令(在 Intel 芯片上,这称为 "Hyperthreading" );用于 CPU 绑定任务
- 例如
a = b*c //Task 1
d = e*f //Task 2
g = a*d //Task 3
// Task 1 and 2 don't depend on each other, and hence can be run in parallel
问题
鉴于上述情况,我如何在 LabVIEW 中控制我使用哪些内核来多处理任务(而不是多线程)?
As of NI LabVIEW version 8.5 the Timed Loop and Timed Sequence structures include a Processor input that allows you to manually assign available processors to handle the execution of the structures. You can configure the processor assignment by wiring an input to the Processor input of the Input Node for the structure or for frames of the structure.
LabVIEW 固有地将数据流解析到多个处理器和多个线程,以达到分析系统所支持的尽可能多的并行性。您应该指定代码的线程模型的情况几乎为零。 Timed Loop 和 Timed Structure 功能应严格考虑用于实时系统,而不是用于在桌面系统上执行(Windows、Mac 或 Linux)。如果您尝试指定线程模型,您几乎肯定会获得比编译器和 运行-time 引擎已经计算出的复杂模型更低的性能。
简介
multiprocessing =使用多个CPU核心来完成一个任务(每个核心都有独立的内存,因此需要每个核心的管道和数据结构"talk" 彼此”)
多线程 = 使用多个线程(在单个 CPU 核心上)和任务调度程序来完成任务(所有线程在 CPU核心)
静态(时间)多线程 - 利用空闲 I/O 时间,通过安排任务按顺序发生而不会在缓存未命中期间暂停(即等待read/write 到 I/O 设备);用于I/O绑定任务
动态(同步)多线程 - 利用可以同时发生的指令(在 Intel 芯片上,这称为 "Hyperthreading" );用于 CPU 绑定任务
- 例如
a = b*c //Task 1
d = e*f //Task 2
g = a*d //Task 3
// Task 1 and 2 don't depend on each other, and hence can be run in parallel
问题
鉴于上述情况,我如何在 LabVIEW 中控制我使用哪些内核来多处理任务(而不是多线程)?
As of NI LabVIEW version 8.5 the Timed Loop and Timed Sequence structures include a Processor input that allows you to manually assign available processors to handle the execution of the structures. You can configure the processor assignment by wiring an input to the Processor input of the Input Node for the structure or for frames of the structure.
LabVIEW 固有地将数据流解析到多个处理器和多个线程,以达到分析系统所支持的尽可能多的并行性。您应该指定代码的线程模型的情况几乎为零。 Timed Loop 和 Timed Structure 功能应严格考虑用于实时系统,而不是用于在桌面系统上执行(Windows、Mac 或 Linux)。如果您尝试指定线程模型,您几乎肯定会获得比编译器和 运行-time 引擎已经计算出的复杂模型更低的性能。