如何在 Windows 上强制一个应用程序在一个核心中运行并且没有其他应用程序在该核心中运行?

问题描述 投票:0回答:3

我认为我的问题很不寻常,但我想在 MATLAB Simulink 中进行实时定位,但我不想使用 XPC 目标。我只是希望程序(simulink)在运行时不会中断,以便拥有一个实时无中断控制系统。按照这个顺序,我可以在没有目标系统的情况下使用我的控制模块。

  1. 我们可以强制一个核心只被 Simulink 使用而不被其他东西使用吗?
  2. 中断的平均时间和最长时间是多少?
  3. 我们可以在 Simulink 中使用其他方法吗?
matlab interrupt simulink cpu-cores xpc-target
3个回答
1
投票

a.如果您有多核平台:远离

core 0
。 Windows 专门将某些任务分配给
core 0
。请参阅 SetThreadAffinityMask 函数以获取如何在特定内核上运行线程的信息。

b.可能会提高线程/进程的优先级。有关设置优先级的详细信息,请参阅 SetThreadPriority 函数SetPriorityClass 函数,有关优先级范围的详细信息,请参阅调度优先级

线程优先级为 THREAD_PRIORITY_TIME_CRITICAL 的优先级 REALTIME_PRIORITY_CLASS 会在线程准备好运行时以最高优先级运行。请注意,当您的线程运行时,这样的优先级设置将不允许任何其他进程/线程在该核心上获得 CPU。


1
投票

Simulink 本质上是一个单线程应用程序。在 Rapid Accelerator 模式下运行时,您可以通过多种方式使用第二个核心(请参阅文档),但总的来说,所有内容都在一个核心上运行。我猜它将来可能会改变,因为很多人希望将单个大型模型的执行分散到多个核心上,但据我所知,目前这是不可能的。

然而,Simulink 不是实时应用程序,因为它运行在 Windows 或其他非实时操作系统上。为什么你不想使用 xPC Target?当您正在研究实时目标时,这将是最好的选择。其他选项是使用实时 Windows 目标、SIL 甚至 PIL(如果您可以访问实时目标硬件)。查看示例

软件和处理器在环(SIL 和 PIL)模拟。我认为您可以将代码生成过程配置为仅在一个核心上执行,但最好询问 MathWorks 来确定。


0
投票
使用imageCFG,您可以预设程序的亲和力。它修改 exe 文件以在所需的核心上运行。

http://www2.robpol86.com/guides/ImageCFG/

© www.soinside.com 2019 - 2024. All rights reserved.