Comment se fait la lecture vidéo sur un ordinateur? Cela ne dépend évidemment pas uniquement du processeur, car la lecture vidéo continue lorsqu'un utilisateur effectue une autre activité, telle que taper dans un champ de commentaire YouTube. Cette tâche semble encore plus compliquée dans le cas du streaming vidéo, où les données doivent probablement être transférées de l'interface réseau vers le contrôleur vidéo / graphique.
EDIT: J'aurais dû indiquer clairement que je comprends que le processeur bascule entre plusieurs processus et threads tout le temps. Ma question visait plus spécifiquement la lecture vidéo. Le traitement vidéo est-il effectué sur le chipset / la carte graphique? Est-ce que ceux-ci offrent généralement une mise en mémoire tampon? Ou tout cela peut-il être géré par un processeur monocœur avec du temps à consacrer à d'autres tâches, ou ai-je tort de penser que les processeurs bas de gamme peuvent lire la vidéo sans retards (hors réseau)?
la source
Réponses:
Une carte graphique moderne fonctionne plus ou moins (un peu) comme un processeur ordinaire.
Sur une carte graphique, vous aurez (parfois) plusieurs processeurs, chaque processeur aura (parfois) plusieurs multiprocesseurs, chacun ayant plusieurs cœurs.
Lorsqu'une vidéo est chargée dans une carte graphique, elle est transcodée dans le tampon de sortie par une certaine allocation de cœurs multiprocesseurs. Ce tampon de sortie est généralement une mémoire accessible globalement, ce qui signifie que tout cœur de n'importe quel multiprocesseur d'au moins un processeur (mais souvent tous) y a un accès direct r / w.
Habituellement, un multiprocesseur est limité à un jeu d'instructions, ce qui signifie qu'une carte graphique ne peut fonctionner simultanément qu'autant de «saveurs» de threads différentes qu'il y a de multiprocesseurs sur la carte. Une "saveur" pourrait par exemple être une simulation physique, un rendu vidéo, un rendu OS ou une fonction cryptographique. Naturellement, un multiprocesseur peut planifier l'exécution de plusieurs types de threads par intermittence, mais cela n'est généralement pas nécessaire.
Le décodage d'une vidéo demande souvent beaucoup de travail, compte tenu de la façon dont elle est généralement compressée et parfois cryptée, de sorte que le tampon d'affichage n'est pas toujours occupé. Ainsi, il est relativement facile de rendre un curseur de souris se déplaçant sur une image vidéo. Cependant, parfois cela ne fonctionne pas tout à fait, et vous verrez comment dans certaines applications votre curseur disparaît. Ce n'est pas nécessairement parce que l'application est "au-dessus" du système d'exploitation, mais simplement parce qu'elle monopolise une partie du tampon de sortie.
la source
Ceci est mis en œuvre en utilisant plusieurs techniques différentes. Dans l'application (par exemple, le navigateur Web), le programme peut exécuter différents threads d'exécution. Un thread peut effectuer le streaming / lecture vidéo, tandis qu'un autre thread peut gérer la saisie de l'utilisateur dans le champ de commentaire.
Ces threads, ainsi que de nombreux autres threads et processus, sont à leur tour planifiés par le système d'exploitation (même si vous n'avez que le navigateur Web ouvert, le système d'exploitation a de nombreuses tâches d'arrière-plan en cours d'exécution, telles que le gestionnaire de fenêtrage, le spouleur d'impression, le Gestionnaire de périphériques USB, etc.). Il appartient au planificateur du système d'exploitation de déterminer quel thread peut s'exécuter activement, sur quel cœur de processeur et pendant combien de temps. Dans un système typique, un thread peut s'exécuter jusqu'à une certaine valeur seuil, supposons 100 millisecondes, avant que le planificateur autorise l'exécution d'une autre tâche.
Ce changement de tâche est fondamental pour tous les systèmes d'exploitation modernes (Windows, Linux, UNIX, etc.) et constitue généralement une partie importante d'un cours sur les systèmes d'exploitation de premier cycle.
la source
La lecture vidéo n'est pas si spéciale. Bien sûr, le décodage accéléré par GPU est courant de nos jours, ce qui libère le CPU pour d'autres travaux, mais il n'en a pas toujours été ainsi. Une lecture vidéo fluide avec un seul processeur est certainement possible, tant qu'il y a suffisamment de processeur disponible pour la résolution et la complexité de l'algorithme de compression, et le faire avec d'autres tâches est tout aussi possible, tant qu'il y a suffisamment de processeur pour les deux, et l'OS se programme bien. La vidéo à 30 ips est courante, ce qui permet à 33 ms de décoder chaque image. Même les puces assez anciennes peuvent gérer cela pour le MPEG-2 de qualité SD, et les puces modernes peuvent le gérer pour le MPEG-4 HD; l'ordinateur portable sur lequel je tape cela nécessite environ 20% du processeur pour lire l'AVC High Profile 720p.
Quant à la mise en mémoire tampon, il y a une quantité limitée disponible. Le minimum pour tout ce qui ne veut pas de déchirement d'écran est le "double tampon", où il y a deux images en mémoire: la carte vidéo en affiche une tandis que le logiciel met à jour l'autre, et les rôles des deux sont échangés pendant la verticale rafraîchir. Avec la "triple mise en mémoire tampon", il y a deux images hors écran, la suivante et la suivante + 1, ce qui réduit la quantité de gigue. Sur les cartes modernes avec de grandes quantités de RAM, il est possible d'aller au-delà pour un plus grand nombre d'images, avec les seuls inconvénients étant la latence visible par l'utilisateur dans la recherche, le démarrage de la lecture, etc. et le fait que d'autres applications pourraient vouloir cette RAM vidéo pour elles-mêmes. .
la source