Décidément, c'est un sujet qui est difficile à comprendre, vu que nous en avons déjà parlé à plusieurs reprises. Mais je ne te jette pas la pierre, c'est sûrement moi qui explique mal.
IntroducionOn va partir sur l'hypothèse d'un
CPU avec 8 threads plus un GPU. Pour que le GPU ait suffisamment de travail, il faut qu'un thread CPU lui soit réservé. Même si le GPU n'utilise le CPU que par pic, il faut qu'il soit accessible dès que le GPU en a besoin pour éviter les creux d'utilisation. On va étudier
trois configurations (default, app_config seul, app_config + préférences locales) et
trois modes possibles (normal, haute priorité, machine virtuelle multi-thread).
A) Première configuration: default. On n'a fait aucune modification dans les fichiers de configuration et 100 % du CPU est dédié à Boinc dans les préférences locales.
1) Mode normalLe GPU réclame 0.89 CPU (c'est un exemple), ce qui est inférieure à 1. Boinc ne connaissant que les valeurs entières de threads, il va lancer
8 tâches CPU plus une tâche GPU.
Le GPU n'aura que les miettes du temps CPU et des trous de calcul seront présents.
2) Mode haute prioritéUne tâche passe en haute priorité et passe devant toutes les autres.
Une tâche CPU s'arrête pour lui laisser sa place (comme quand on se lève dans le métro face à une personne âgée

). La tâche GPU continue à tourner avec moins de miettes de temps CPU que dans le cas A1.
3) Mode machine virtuelle multi-threadLa tâche demande le nombre
maximum de threads disponibles, soit 8. Ce mode est équivalent au mode haute priorité pour tous les threads à la fois. Le GPU n'a presque plus de temps CPU et
se tourne les puces.
B) Deuxième configuration: fichier app_config. Les préférences locales conservent 100 % du CPU dédié à Boinc. Un fichier app_config.xml a été ajouté dans le dossier de tous les projets GPU, avec pour chaque application concernée une section comportant, entre autres:
<gpu_versions>
<gpu_usage>1</gpu_usage>
<cpu_usage>1</cpu_usage>
</gpu_versions>
1) Mode normalLe GPU réclame 1 CPU. Boinc va lancer
7 tâches CPU et réserver un thread CPU pour la tâche GPU. Le GPU sera suffisamment alimenté et n'aura pas de trous de calculs.
2) Mode haute prioritéUne tâche passe en haute priorité devant toutes les autres,
y compris la tâche GPU. Cette dernière peut potentiellement repasser dans le cas A2.
3) Mode machine virtuelle multi-threadLa tâche demande le nombre maximum de threads disponibles, soit 8. C'est identique au cas A3 et
le GPU se tourne les puces.
C) Troisième configuration: fichier app_config et préférences locales. Les préférences locales sont modifiées pour ne dédier que
87.5 % du CPU à Boinc, soit n-1 threads (7/8*100=87.5). Un fichier app_config.xml a été ajouté dans le dossier de tous les projets GPU, avec pour chaque application concernée une section comportant, entre autres:
<gpu_versions>
<gpu_usage>1</gpu_usage>
<cpu_usage>0.05</cpu_usage>
</gpu_versions>
1) Mode normalLe GPU réclame 0.05 CPU. Il n'aura pas de thread supplémentaire attribué par Boinc, mais ce n'est pas grave puisque un thread est libre dans les préférences. Boinc va lancer
7 tâches CPU et une tâches GPU, qui bénéficiera des
12.5 % restant. Le GPU sera suffisamment alimenté et n'aura pas de trous de calculs.
2) Mode haute prioritéUne tâche passe en haute priorité devant toute les autres, mais
cela ne change rien pour le GPU qui n'a pas de temps CPU attribué par Boinc.
3) Mode machine virtuelle multi-threadLa tâche demande le nombre maximum de threads disponibles, soit
seulement 7. Cela ne change rien non plus pour le GPU qui bénéficie toujours des
12.5 % restant du CPU. Il sera peut-être juste un peu ralenti à cause de la mémoire cache du CPU.
ConclusionComme on l'a vu ci-dessus, le GPU est impacté en permanence dans la configuration A. Dans la configuration B, des problèmes apparaissent dès qu'une tâche demande la priorité ou avec une VM multi-thread. Il n'y a que dans la
configuration C que le GPU sera le moins impacté par les autres tâches. C'est celle que je préconise. En complément, il est possible de faire tourner deux tâches simultanées sur le GPU avec l'option <gpu_usage>0.5</gpu_usage> (1/2=0.5)