@magellan
Mon fils a trouvé ta réponse sympa et utile !!
Donc merci pour lui
Remarque sur les développeurs:
J'ai pour habitude de souvent dire: Le salut vient plus des développeurs que du matériel
En effet:
On a des CPU et des GPU bourrés de cores qui si ils bossent pas en parallèle deviennent inutiles:
Exemple:
Avec Adobe Première Pro je n'utilise plus les encodeurs de Mainconcept qui sont lents mais un plugs gratuits fait par un développeur passionné qui donne des exports rapide de qualité.
Développer un soft qui utilise toutes les capacités des CPU & GPU actuels doit être un sacré challenge ? Je me trompe ??
Apple par exemple vend des appareils souvent à des prix honteux quand on regarde ce qu'ils mettent à l'intérieur ..Mais en vidéo par exemple ils ont un soft (FCP) qui exploite au maximum les possibilités matérielle de leur machine, d'après ce que j'ai cru comprendre.
La dernière version de CC2020 (je ne l'ai pas) a je crois progressé côté export
@Patakesse devrait le confirmer
Ta question est simple, mais la réponse est délicate
On a des CPU et des GPU bourrés de cores qui si ils bossent pas en parallèle deviennent inutiles:
Exemple:
Avec Adobe Première Pro je n'utilise plus les encodeurs de Mainconcept qui sont lents mais un plugs gratuits fait par un développeur passionné qui donne des exports rapide de qualité.
Développer un soft qui utilise toutes les capacités des CPU & GPU actuels doit être un sacré challenge ? Je me trompe ??
Non ils ne sont pas inutiles car leurs performances individuelles sont telles qu'elles permettent d'accéder à une multiplication de threads (fils d'exécution) sans que tu aies grand-chose à gérer. Aujourd'hui, on a tellement poussé les OS et les logiciels à ventiler leur usage des coeurs qu'une appli à thread unique profite de son coeur dans son coin... sans attendre son tour dessus. Les préceptes de gestion préemptive des fils d'exécution sont tellement avancés que cela peut même être un avantage sciemment choisi au moment du codage. Mais là c'est à la marge et très complexe dire si, oui ou non, ça fait sens d'aller vers telle ou telle structure codée.
Ensuite: utiliser les capacités GPU/CPU n'est de base pas forcément un vrai challenge au sens où les langages et les librairies actuelles intègrent très majoritairement tout ce qu'il faut. Par exemple, si tu veux tester du machine-learning, les librairies documentées permettent sans grosse difficulté d'aller chercher de la puissance processeur (GPU/CPU) là où elle est selon ta machine. En gros? Tu lui donnes un ordre, et si ta machine dispose d'une CG permettant des instructions spécifiques (style CUDA pour simplifier énormément), cela va se faire sans des efforts dingues.
Je caricature naturellement: bien équilibrer la charge est un challenge, et cela l'a toujours été. C'était même pire avant, notamment sur les serveurs où, là, tu étais carrément sur des multiprocesseurs et non des multicoeurs. Il fallait donc aller bien plus loin dans la gestion de tes threads, identifier techniquement ce que ta machine pouvait autoriser, et surtout faire énormément attention à l'allocation mémoire pour ne pas créer des goulets d'étranglement.
Là où il y a challenge, c'est d'être capable de bien exploiter les possibilités de ces machines, et derrière de faire en sorte que tous ces éléments exécutés en parallèle se synchronisent correctement... et que cette synchronisation vaille la peine.
Schématisons très vulgairement: (l'exemple que je vais donner sera très grossier mais qui peut faire sens)
- Admettons une conversion d'une vidéo d'un format A (son+image) vers un format B (son et image dans des codecs différents)
- Admettons que la conversion audio ne peut pas être segmentée, pas plus que la conversion vidéo
- Cela donne que seuls deux flux parallèles peuvent bosser; la vidéo d'un côté, et de l'autre l'audio.
Résultat: pour avoir le fichier final, il faut forcément attendre que le plus lent des deux ait fini son job. Est-ce vraiment un gain de paralléliser? En principe... oui, à condition que les coeurs utilisés n'aillent pas perdre du temps à cause d'autre processus de ta machine. Il peut être plus rentable de saturer un coeur pour tout faire seul.
Si l'on pousse ce raisonnement, on peut dire (par exemple)
- L'audio a x plages (5.1 par exemple). Faisons chaque plage sur un coeur pour accélérer cette gestion de conversion
- La vidéo peut être découpée par segments quelconques (peu importe le raisonnement technique, là c'est pour l'exemple), traitons chacun de ces segments en parallèle.
Tu as donc les outils, les composants, ça n'est pas "complexe" en principe, mais ça le devient dès que tu veux faire les choses correctement.
Je soupçonne que ton exemple met en exergue deux choses:
- Adobe n'a pas réformé ce composant. Ses performances sont meilleures qu'avant car les coeurs uniques, eux aussi, sont meilleurs que les anciens sur les mêmes exécutions
- Que le plug in dont tu parles tire bien parti de cette puissance de parallélisation... ou tout bêtement qu'il a identifié que le code d'origine était "sale", parce que ça aussi, hélas, ça existe!
Ce n'est pas parce que deux algorithmes donnant le même résultat ont des performances différentes tirent ou pas partie de la puissance réelle de nos machines. Si je vais au bout du vice: ta librairie A moncoeur bien conçue fera mieux qu'une librairie B en multicoeurs mal foutu.
Pour finir (et encore): le fait de multiplier les coeurs a pour avantage fondamental de permettre de paralléliser à mort les processus avec une latence extrêmement faible. Lorsqu'on n'avait qu'un coeur (ie les machines du style Atari/amiga et j'en passe... jusqu'aux premiers multicoeurs PIV et équivalents), paralléliser revenait en fait à coller des tâches avec des priorités distinctes dans une file d'attente, le tout nuisant naturellement aux performances. C'est un sujet ultra délicat car là je ne fais que caricaturer à mort. Pour avoir bossé sur un softphone (téléphone virtuel sur un PC), la parallélisation à l'époque forçait à prendre en compte le fait que toutes les machines n'avaient pas des coeurs supplémentaires, que l'empilement de tâches d'attente pouvait ralentir inutilement l'environnement, et que s'il y avait quoi que ce soit de gourmand en cycles machine on pouvait vite avoir des latences (sonnerie en retard, activation des fonctionnalités de téléphonie prenant du temps....)