Skip to main content

Multicœur

L'attribution de la tâche et du cœur du processeur est affichée dans Configuration des tâches objet sur le Onglet : Groupes de tâches onglet.

De plus en plus de contrôleurs actuels sont équipés de processeurs dotés de plusieurs cœurs de processeur.

Si CODESYS est exécuté sur un contrôleur multicœur sans utiliser la fonctionnalité multicœur, puis la distribution des tâches est gérée par le planificateur du système d'exploitation. Cela est vrai à condition qu'une application soit exécutée avec plusieurs tâches. Dans ce cas, vous n'avez aucune influence directe sur la répartition des tâches. En fonction de l'équilibrage de charge, les tâches peuvent également être exécutées sur différents cœurs de processeur.

Avec le CODESYS Grâce à la fonction multicœur, les tâches IEC elles-mêmes peuvent être attribuées à des cœurs CPU dédiés, en tenant compte du nombre de cœurs CPU acquis. Cela peut entraîner une amélioration des performances. Le programme IEC doit être divisé en plusieurs tâches à cet effet.

Lors de la distribution des tâches CEI aux cœurs de CPU, il y a dans CODESYS deux stratégies fondamentalement différentes :

  • Tâche IEC qui est liée et fixée à un cœur de processeur :

    La tâche est toujours exécutée sur ce cœur de processeur spécifique. Plusieurs tâches peuvent être liées à un cœur de processeur par regroupement. Ceci est utile, par exemple, si le programme IEC n'est pas encore capable de s'exécuter simultanément sur plusieurs cœurs de processeur.

  • La tâche IEC est exécutée sur tous les cœurs de processeur :

    Le système d'exploitation prend le contrôle de la distribution d'une ou de plusieurs tâches d'un groupe sur les cœurs du processeur.

Important

Lorsque les tâches CEI sont réparties sur les cœurs du processeur, certains changements entraînent des changements dans le comportement du programme CEI, qui doivent être pris en compte.

  • Le traitement des tâches IEC selon la priorité n'est plus donné ! Les tâches ne sont traitées selon leur priorité que si elles sont liées à un cœur de processeur.

  • La cohérence cyclique des données dans la tâche IEC la plus prioritaire n'est plus une donnée. Par conséquent, les données doivent être copiées localement au début du cycle de tâches IEC si les valeurs ne doivent pas changer au cours du cycle.

  • Pour toutes les tâches, il existe une image de processus partagée à partir de laquelle les tâches sont exécutées. ReadInputs() la fonction est appelée au début de chaque tâche et WriteOutputs() la fonction est appelée à la fin. Par conséquent, le modèle IPO s'applique à chaque tâche individuellement. Ces fonctions lisent et écrivent dans l'image de processus partagée. L'image du processus est également écrite physiquement et les paquets ne sont transmis que lorsque la tâche de cycle de bus est appelée. Cependant, la tâche du cycle de bus attend chaque appel WriteOutputs et ReadInputs des tâches. Cela garantit la cohérence des données au sein de la tâche du cycle de bus.

    • Les sorties ne peuvent être affectées qu’à une seule tâche.

    • Les entrées peuvent être affectées à plusieurs tâches, mais l’accès direct doit être évité. Les entrées doivent être écrites dans les variables locales de la tâche au moyen d'opérations atomiques.

    • Une deuxième tâche, qui met à jour l'image du processus avec ReadInputs() en parallèle de la première tâche, met également à jour les entrées de la première tâche pendant son exécution.

    • De ce fait, la cohérence des données d’une tâche n’est assurée que sur des cœurs uniques pour la tâche la plus prioritaire.

    Astuce

    Vous pouvez définir la tâche du cycle du bus sur Réglages PLC onglet.

    Vous pouvez afficher l'accès aux E/S sur Onglet : Déploiement des tâches onglet.

    Pour plus d'informations, voir : Tâche de cycle de bus

  • Pour les compteurs cohérents (incrémenteurs, décrémenteurs), la fonction de bibliothèque externe atomique doit toujours être utilisée SysCpuAtomicAdd() être utilisé (pour plus de détails, voir : SysCpuHandling.library)

Important

Cohérence des données

  • Accès aux bits (type de données BIT) ne sont pas traités de manière cohérente (atomique) dans le programme CEI sur les processeurs multicœurs. Pour cela, nous vous recommandons d'utiliser la fonction de bibliothèque externe SysCpuTestAndSetBit(). (Pour plus de détails, voir SysCpuHandling.library)

  • Types de données simples d'une largeur maximale de 32 bits (BOOL, BYTE, WORD/INT, DWORD/DINT, etc.) sont également traités de manière cohérente (de manière atomique) dans le programme IEC sur les processeurs multicœurs.

  • Types de données à 64 bits (LINT, LWORD, et LREAL) sont traités de manière cohérente (de manière atomique) dans le programme IEC sur les systèmes 64 bits et les systèmes multicœurs uniquement. Pour ce faire, vous n'avez pas besoin de prendre de précautions.

  • Pour accéder à des types de données complexes (STRING, FB, STRUCT, et ARRAY), vous devez prendre vous-même les dispositions nécessaires à la synchronisation/à la cohérence.

  • Vous pouvez dans la configuration de la tâche dans l'onglet utilisation variable déterminer si une variable dans une tâche IEC dispose d'un accès en écriture ou en lecture.

  • Sur les systèmes multicœurs, un « effet de réorganisation de la mémoire » peut se produire. Pour plus d'informations, voir : Opérateur CEI : __MemoryBarrier().

Répartir les tâches sur plusieurs cœurs de processeur

Exigence : au moins deux tâches sont définies dans votre candidature, par exemple MainTask (tâche CEI) et LowTask (Tâche CEI).

  1. Ouvrir l'objet configuration des tâches dans le bloc-notes.

  2. Passez au Groupes de tâches onglet.

    L'aperçu montre la valeur par défaut Tâches CEI groupe de travail.

  3. Ajouter avec le bouton Ajouter un groupe ajouter un nouveau groupe de tâches.

    Le NewGroup le groupe est ajouté.

  4. Double-cliquez sur le nom du groupe NewGroup et changez-le en LowGroup.

  5. Choisissez sous Coeur une mission, par exemple 1.

  6. Ouvrez la tâche LowTask (CEI-Task) dans l'éditeur.

  7. Dans Groupe de travail, sélectionnez le nouveau groupe LowGroup.

    Le LowTask la tâche est maintenant traitée par le cœur du processeur 1 en raison de son appartenance à un groupe dans LowGroup.

Afficher l'utilisation du processeur par cœur de processeur dans la trace

Dans CODESYS, vous pouvez afficher dans une visualisation la charge du processeur dans un Traçabilité de l'appareil objet.

Pour plus d'informations sur l'affichage des traces d'appareil dans le projet, voir : Accès à toutes les traces du contrôleur