.

多核

.
.

对象:任务配置

当今越来越多的控制器具有多个CPU内核的处理器。为了在IEC程序中利用此优势并提高性能,CODESYS提供了用于在这些CPU内核上分发IEC任务的选项。此外IEC程序应分为多个任务。

.在CODESYS中,有两种基本的不同策略可用于在CPU内核上分配IEC任务:

  • 将IEC任务固定链接到CPU内核:
    任务始终在此特定CPU内核上执行。在这种情况下,如果还不能同时在多个CPU内核上执行IEC程序,则也可以将多个任务捆绑到一个和同一CPU内核上。
  • IEC任务在所有CPU内核上执行:
    操作系统控制在CPU内核上分发任务的控制。

提示!

.当IEC任务分布在CPU内核上时,某些更改会导致IEC程序中的行为发生,必须考虑以下几点:

  • IEC不再按优先级处理IEC任务。仅当任务捆绑在一起到同一CPU内核时,才按优先级处理它们。
  • 不再给出具有最高优先级的IEC任务中数据的循环一致性。因此,如果值在周期内不得更改,则必须在IEC任务周期开始时本地复制数据。
  • 对于一致的计数器(递增器,递减器),应始终使用原子外部库函数SysCpuAtomicAdd()(有关更多详细信息,请参见SysCpuHandling.library)。

提示!

.数据一致性

  • 在IEC程序中,多核CPU上的位访问(数据类型BIT)未得到一致(原子地)处理。为此,我们建议您使用外部库函数SysCpuTestAndSetBit() (有关更多详细信息,请参见SysCpuHandling.library)。
  • 多核CPU上的IEC程序中也可以一致(原子地)处理宽度高达32位的简单数据类型(BYTE, WORD/INT, DWORD/DINT等)。
  • 64位(LINT,LWORD,LREAL)的数据类型仅在64位系统和多核系统上进行一致(原子地)处理。为此,您无需采取任何预防措施。
  • 要访问复杂的数据类型(STRING,FB,STRUCT,ARRAY),您必须自行安排同步/一致性。
  • 变量使用选项卡的任务配置中,可以定义IEC任务中的变量是否具有读取或写入访问权限。
  • 多核系统可能会发生“内存重新排序效应”。有关更多信息,请参见IEC操作符__MemoryBarrier()
.
 通过多个处理器内核分配任务
.
 在跟踪中显示每个处理器核的处理器负载