Foire aux questions (FAQ)

Problèmes fréquents

« Illegal instruction » (SIGILL)

Votre tâche cause une erreur de type « Illegal instruction » ou SIGILL, par example:

[alice@ip09 ~]$ cat slurm-3304643.out
/var/spool/slurmd/job3304643/slurm_script: line 11: 25047 Illegal instruction   (core dumped) python my_script.py

Cette erreur se produit lorsqu’un programme optimisé pour une classe de processeurs particuliers est exécuté sur un processeur qui n’est pas compatible.

Si vous compilez votre code sur ip09 avec GCC, utilisez l’option d’optimisation -march=core-avx2. Si vous utilisez les compilateurs Intel, l’option correspondante est -xCORE-AVX2. N’utilisez pas -march=native ou -xHost. Ces dernières tentent d’optimiser pour les processeurs Intel d’ip09. Le programme résultant peut être incompatible avec les processeurs AMD de certains nœuds de calcul.

Mon calcul est beaucoup plus lent que sur mon portable

Vous avez testé un programme parallèle sur votre portable (ou un autre ordinateur). Ce programme fonctionne aussi dans une tâche sur la plateforme CHP-IQ mais il est beaucoup plus lent. Que se passe-t-il ?

D’abord, assurez-vous d’utiliser le même nombre de cœurs CPU sur votre portable et dans votre tâche pour que la comparaison soit valide. Par exemple, si votre portable a 8 cœurs CPU et que votre programme les utilise tous, vous devriez demander 8 cœurs CPU dans votre tâche. Si vous demandez moins de cœurs, voire un seul, il est normal que la performance soit moindre !

Si le problème persiste, vérifiez que votre tâche utilise correctement les ressources qui lui sont allouées. Un problème commun est un programme parallèle qui tente d’utiliser tous les cœurs CPU du nœud de calcul même s’il ne sont pas tous alloués à la tâche. Par exemple, un programme pourrait lancer 96 fils d’exécution pour tenter d’utiliser les 96 cœurs d’un nœud CPU de la partition c-iq même si la tâche n’a accès qu’à un seul de ces cœurs. Le système d’exploitation alterne alors entre les 96 fils pour que chacun reçoive sa part de temps CPU. Cette alternance cause une dégradation importante de la performance, sans compter les potentiels problèmes de synchronisation entre les fils.

Dans la plupart des cas, le nombre de cœurs CPU alloués à une tâche devrait correspondre exactement au nombre de processus ou de fils exécutés par la tâche. Si une tâche exécute trop de fils ou de processus, htop montrera plus de fils d’exécution qu’attendu, et ces fils n’utiliseront pas tous 100 % de temps CPU comme ils le devraient.

Pour les programmes parallèles qui utilisent des fils d’exécution OpenMP, le problème peut être corrigé en réglant le nombre de fils à exécuter pour qu’il soit identique au nombre de cœurs alloués. Ajoutez cette instruction à votre script de tâche avant l’exécution de votre programme :

export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK:-1}

Certaines fonctions d’Intel MKL sont automatiquement parallélisées. En CHP, ce parallélisme implicite est habituellement indésirable. Vous pouvez le désactiver avec :

export MKL_NUM_THREADS=1

Si vous souhaitez plutôt utiliser ces algorithmes parallèles, paramétrez le nombre de fils d’exécution avec :

export MKL_NUM_THREADS=${SLURM_CPUS_PER_TASK:-1}

Voir aussi

  • Cette section de notre guide Python traite du problème des fils d’exécution dans le contexte de ce language de programmation.