Bonjour journal,
Si on achète un ordinateur maintenant, on a le droit entre 2 coeurs ou plus. Cela signifie que l'on souhaiterait utiliser ces 2 coeurs de manières sympatiques et qu'ils soient utiliser. Au mieux que tout aille 2 fois plus vite.
Pour l'encodage par exemple, quand on encode une vidéo, on est un peu navré de voir qu'un seul processeur bosse.
De ma vision d'utilisateurfinaletsurtoutpasdedeveloppeur, je me demandais en quoi il n'était pas possible de multithreder mencoder par exemple.
Ma petite idée (qui doit être super mauvaise, sinon, nuls doutes que d'autres y auraient pensé avant) :
la vidéo fait 2 gigas.
pourquoi ne pas lancer 2 encodages à la volée 1 ) sur la partie [debut:moitié] puis 2) sur la partie [moitié;fin]
et ensuite, en phase finale de faire un petit raccord.
2e idée :
pour les séries par exemple (ou meme les films que l'on veut conserver chez soi) : il y a sans doutes des passages "noirs" de 1/2 ou 1 seconde.
pourquoi ne pas séparer le films en parties entre les bandes noires et encoder en // les parties. Le mixage se faisant à la fin ?
merci de ton apport technique cher journal
# Les IO
Posté par Pinaraf . Évalué à 0.
Lire le premier octet, puis l'octet 1073741824, puis... (bon, c'est du gros à peu près)
Le disque dur va pleurer...
[^] # Re: Les IO
Posté par farib . Évalué à 6.
[^] # Re: Les IO
Posté par KiKouN . Évalué à 3.
# Heing ?
Posté par Ph Husson (site web personnel) . Évalué à 7.
Si t'utilise des codecs ou bibliothéques alacon possible, mais bon à ma connaissance lavc et x264 entre autre (bon le 1° ne gere quasiement aucun codec existant je dois bien l'avouer.) peuvent faire du multithreading ... (ok avec une petite perte sur l'estimation des mouvements, mais chez moi j'avais bien +50% de fps je crois). Pour xvid apparement y a que l'estimation de mouvements qui est threadable et que pour l'estimation de mouvement (mais j'y connais pas grand chose et si ca se trouve c'est en fait le plus gros du boulot donc pas grave si y a "que" ca de géré.).
Non moi ce que je trouve dommage comme truc qui sert à rien c'est les cartes graphiques ...
À vue de nez on devrait au moins pouvoir doubler la vitesse d'encodage en les utilisants
PS:j'utilise le manpage de mencoder comme source d'information, recherchez thread (original non?) pour s'y retrouver.
[^] # Re: Heing ?
Posté par M . Évalué à 9.
À vue de nez on devrait au moins pouvoir doubler la vitesse d'encodage en les utilisants
Sauf que les cartes graphiques ont des accès rapide dans le sens cpu->gpu mais pas dans l'autre sens.
Sinon, c'est loin d'être trivial pour faire un encodeur multithread surtout si tu veux garder les meme perf en monothread et pas trop perde de qualité en multithread.
[^] # Re: Heing ?
Posté par briaeros007 . Évalué à 5.
Tu veux dire que mpeg4 c'est pas utilisé ?
Ah première nouvelle.
[^] # Re: Heing ?
Posté par Ph Husson (site web personnel) . Évalué à 2.
Ce que t'as cité ca s'appelle de l'ironie.
[^] # Re: Heing ?
Posté par briaeros007 . Évalué à 2.
J'hésitais et j'ai pris le mauvais choix ;)
[^] # Re: Heing ?
Posté par sirrus . Évalué à 2.
Pour mencoder je pense qu'il faut cependant le compiler pour utiliser plusieurs cpu.
[^] # Re: Heing ?
Posté par briaeros007 . Évalué à 2.
C'est x264 qu'il faut compiler avec le support des threads.
[^] # Re: Heing ?
Posté par Ph Husson (site web personnel) . Évalué à 2.
[^] # Re: Heing ?
Posté par Aefron . Évalué à 6.
Alors, ça, c'est de la page de manuel!
Je joue un peu avec mencoder et x264 ces temps-ci, et c'est vraiment tripant... d'autant plus avec une doc aussi abondante.
Ne pas oublier non plus d'aller jeter un coup d'oeil à la doc html de mplayer, qui fournit pas mal d'informations détaillées sur l'intérêt de certaines options et sur la manière de s'y prendre pour faire les choses proprement (notamment sur le désentrelaçage/dételecinage et sur les spécificités de chaque type de codec)...
D'ailleurs, autant dans la page de manuel que dans la doc html, il est mentionné que le multithreading a un effet néfaste sur la qualité d'encodage finale (enfin, très peu avec le H.264, déjà beaucoup plus avec le mpeg4 à l'ancienne, type xvid)... après, avec certaines options qui améliorent le rapport signal/bruit de plusieurs ordres, de grandeurs par rapport à la destruction apportée par le multithreading, ça peut facilement devenir négligeable...
... bon, par contre, rajouter des options qualitatives plombe la vitesse d'encodage... mais heureusement, on est à l'heure des multi-cores (je dois avouer que je trouve très sexy le Q9450 d'intel qui doit sortir au prochain trimestre... d'autant plus que j'ai une des quelques cartes mères i975 qui passent avec les 45nm), et x264 est très scalable (j'obtiens +90% de vitesse d'encodage entre threads=1 et threads=auto sur mon E6600... raaah... vivement le Q9450)... amis des nuits de calcul bourrines, bonsoir.
[^] # Re: Heing ?
Posté par djibb (site web personnel) . Évalué à 2.
[^] # Re: Heing ?
Posté par Aefron . Évalué à 4.
Pour l'instant, je n'en suis qu'à jouer et à créer mes scripts (niveau gui, sous Debian, il n'y a que dvd:rip, qui se base sur transcode, pas compatible avec le H.264 multi-pass en ce moment et que j'ai le sentiment de moins pouvoir maîtriser que mencoder en shell, mais pas d'acidrip, qui a somme toute l'air bien sympa... en gros, je me crée un frontend en shell pour ripper plusieurs DVD à la suite, et en faire des mkv en H.264/AC3/VOBSub, à partir de fichiers de configuration qui spécifient tout ce dont j'ai besoin)...
... je n'ai pas encore fait tous les tests qui me permettent d'affirmer être satisfait de la qualité et j'ai encore des soucis comme l'utilisation vraissemblable d'options non supportées par le décodeur dans mplayer (plein de messages à la lecture), mais il m'a semblé que plus j'utilisais d'options stressant le CPU (sur le E6600 overclocké @3,4GHz, je mets entre 45 et 60 minutes pour un encodage en deux passes H.264 d'un épisode type Simpsons ou Futurama, avec un très gros bitrate ne réduisant finalement la taille du fichier que de moitié... la taille est évidemment une préoccupation, sinon, je n'encoderais pas, mais je voudrais rester le plus proche possible de la qualité originelle du DVD), plus le passage de threads=1 à threads=auto était bénéfique...
... je ne certifie donc ni la pertinence, ni l'efficacité pratique de ces réglages (inspirés de la page de manuel, de la doc html et du forum de doom9.org... et que je suis encore en train de tester quand j'ai du temps, plus pour l'amusement que sérieusement pour l'instant)...
... j'utilise des profils mencoder, et la dernière fois que j'ai testé, les parties relatives aux options d'encodage étaient quelque chose du genre (désolé si la ligne est un peu longue...):
... des estimations sur l'amélioration du PSNR pour chaque option peuvent être trouvées dans la doc html de mencoder, et des discussions sur le même sujet, sur le forum de doom9.org... je n'en dirais pas plus là-dessus, n'ayant guère encore vérifié, quantitativement, la question avec plus de rigueur qu'une loutre bourrée ne l'aurait fait...
... pour ce qui est du désentrelacement, ça peut être beaucoup plus compliqué et ça dépend hautement de la video (ça peut être entrelacé, téléciné, hard téléciné, mixé progressif/hard-téléciné)... ça, pour l'instant, j'en suis encore à voir comment gérer la chose... par contre, ça bouffe aussi du proc, quelque chose de mignon...
[^] # Re: Heing ?
Posté par seginus . Évalué à 2.
http://linuxdansmonpc.is-a-geek.com/index.php?page=rip_dvd_m(...)
Je voulais faire une petite interface mais je n'en ai pas eu le temps (et ça ne va pas en s'arrangeant).
J'avais pensé que le plus simple était de d'adapter Acidrip, mais je n'y suis pas parvenu.
Au passage, je trouve dommage que cette application ne soit toujours pas « multilangue » (de mémoire les noms sont mis « en dur » dans le programme en Perl.
# Re:
Posté par IsNotGood . Évalué à 3.
Il est possible. C'est quasiment toujours possible.
Mais de façon général, le multi-threading avec pour abjectif le gain de performance, est l'enfer du développeur.
Je le sais bien, j'en fais (et dans le domaine de la vidéo). Et franchement, parfois j'en ai hypra hypra marre. Si je peux éviter le multi-threading, je l'évite sans la moindre miliseconde d'hésitation.
[^] # Re: Re:
Posté par ZeroHeure . Évalué à 2.
et très naïvement:
il faudrait des langages spécialisés, des outils particuliers, une manière différente de coder , ... ?
"La liberté est à l'homme ce que les ailes sont à l'oiseau" Jean-Pierre Rosnay
[^] # Re: Re:
Posté par mathieu mathieu (site web personnel) . Évalué à 6.
le multithreading est un développement contraignant.
Les bugs sont plus "aléatoire" et donc leur reproduction plus difficile ...
Mais bon là on parallélise un traitement, chose que je n'ai jamais eu l'occastion de faire. L'usage le plus courant est de faire une tâche pour un traitement spécifique ..
[^] # Haskell !
Posté par lasts . Évalué à 3.
http://haskell.org
(il faut aussi citer erlang, qui est spécialement orienté concurrence, mais que je connais moins.. dans tous les cas, c'est du bon ^_^)
Bref, pour peu que tu trouves le temps de t'intéresser à ces deux langages fondamentalement différents de ce que tu dois connaître, je pense que tu y trouveras ton compte.
[^] # Re: Haskell !
Posté par mathieu mathieu (site web personnel) . Évalué à 1.
- Utilisation de bibliothèques propriétaires (je n'ai que des .h en entrée)
- Un gros passée de 20 ans tout en C.
- le binaire doit être autonome, le client ne doit rien installé de plus.
[^] # Re: Re:
Posté par Yusei (Mastodon) . Évalué à 8.
La solution la plus simple pour ne pas avoir de problèmes, c'est de mettre dans chaque thread des calculs complètement indépendants, de sorte qu'on n'a pas besoin de se préoccuper de leur ordre d'exécution. C'est plus ou moins facile selon le problème à traîter, mais en règle générale c'est très difficile.
Comme on ne peut pas en général faire ça, on essaye d'avoir des traitements relativement indépendants dans chaque thread, et de "verrouiller" les ressources partagées lorsqu'on les modifie, pour éviter que deux threads se perturbent l'un l'autre. On a différents outils pour ça: verrouiller une variable pour etre sur que personne ne la modifie tant qu'on n'a pas fini, attendre qu'une condition soit vraie, etc. Sécuriser complètement son code ainsi est assez lourd.
Enfin, une conséquence amusante (ou pas) de l'ordre apparemment "aléatoire" d'exécution des instructions, c'est qu'il est très difficile de reproduire les bugs. Parfois un bug c'est produit parce que telle instruction s'est produite avant telle autre, parce que tel coeur était plus chargé que l'autre à ce moment. Reproduire les mêmes conditions est pour l'instant assez compliqué.
La solution la plus satisfaisante intellectuellement parlent est d'utiliser un langage fonctionnel, dans lequel on n'a pas d'instuctions qui s'exécutent dans l'ordre, et pas d'effets de bord à l'exécution d'une fonction. Le compilateur est beaucoup plus à même de répartir les calculs entre plusieurs threads dans ce cas.
# x264
Posté par ragoutoutou . Évalué à 8.
Sinon, l'encodage de morceaux de fichiers, c-à-d on tronçonne le fichier en bouts de 20 secondes et on soumet les morceaux à plusieurs instances de l'encodeur, ça marche bien. Au boulot on a fait un proof of concept d'encodage vidéo x264 avec un système grid Fura et 22 serveurs avec 2 quad core par serveurs, et ça va très vite...
[^] # Re: x264
Posté par ʭ ☯ . Évalué à 6.
⚓ À g'Auch TOUTE! http://afdgauch.online.fr
[^] # Re: x264
Posté par farib . Évalué à 4.
C'est donc théoriquement encore tronçonnable (bien qu'il faille se donner plus de peine et pas juste couper le fichier, mais jouer avec le fichiers de stats, etc...)
# mp32ogg
Posté par patrick_g (site web personnel) . Évalué à 3.
Naïvement je m'attendais à un doublement de la vitesse car c'est un cas super facile pour le soft : comme les différents morceaux de musique sont séparés il suffit d'en encoder un avec un core et un autre avec l'autre core. Idéal !
Malheureusement cela ne s'est pas vérifié et j'ai des temps d'encodage d'un album qui sont tout à fait comparables à ceux de mon ancien laptop monocore (modulo la montée en fréquence du fait du passage à 2 GHz avec le nouveau).
Déçu je suis :-(
[^] # Re: mp32ogg
Posté par ʭ ☯ . Évalué à 5.
En fait le script utilise 2 cores : un pour décompresser, un autre pour compresser. Mais comme la décompression utilise 20 fois moins de calculs, tu ne gagnes que 5% de temps. Il est par contre très facile de lancer le script autant de fois que tu as de coeurs, en mettant les 2 moitiés de l'album dans 2 dossiers différents par exemple. Et là ça ira 2 fois plus vite (à moins qu'un cache matériel commun aux 2 cores ne gâche tout).
⚓ À g'Auch TOUTE! http://afdgauch.online.fr
[^] # Re: mp32ogg
Posté par Milo . Évalué à 4.
Il doit aussi être possible d'utiliser GNU Make pour ça et son option magique "-j"
[^] # Re: mp32ogg
Posté par KiKouN . Évalué à 5.
http://linuxfr.org/~Zezinho/24996.html
# DVD:RIP
Posté par ʭ ☯ . Évalué à 4.
⚓ À g'Auch TOUTE! http://afdgauch.online.fr
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.