« Architecture de la PlayStation 2 (index)

Architecture de la PlayStation 2

Chapter 4: Coprocesseurs


Table des matières

  1. Architecture
  2. Fonctionnalités
    1. Vector Processing Unit 0
    2. Vector Processing Unit 1
  3. Des mondes infinis
  4. Vous choisissez le workflow

Cela fait deux ans que la concurrence a présenté sa dernière proposition. Si vous avez lu l'article en question et commencez juste à lire celui-ci, je suppose que vous attendez toujours pour 'le truc' qui rend la PS2 aussi puissante qu'elle le semblait alors. À présent, laissez-moi vous présenter un ensemble très important de composants que Sony a placé dans l'Emotion Engine, les Vector Processing Units, ou 'VPU'.

Architecture

Un Vector Processing Unit est un petit processeur indépendant conçu pour traiter des vecteurs, en particulier des vecteurs de quatre float. Ces processeurs sont si rapides qu'ils n'effectuent qu'un cycle par opération, ce qui peut être extrêmement pratique pour le calcul géométrique. Bien qu'ils exposent un comportement non standardisé similaire au FPU du processeur.

Les VPUs comportent les composants suivants :

Fonctionnalités

Pour pouvoir fonctionner, l'unité vectorielle nécessite d'être 'démarrée'. Pour ce faire, le processeur principal est chargé de fournir le microcode.

Il y a deux VPUs intégrées à l'Emotion Engine, mais elles sont organisées différemment, laissant place à différentes utilisations et optimisations.

Vector Processing Unit 0

Image
Architecture du VPU0.

La première VPU, intitulée VPU0, est placée entre le processeur et l'autre unité vectorielle (VPU1). Elle est là pour 'assister' le processeur principal.

La VPU0 a deux modes de fonctionnement :

Le mappage mémoire de la VPU0 donne également accès à certains des registres et flags de l'autre VPU, vraisemblablement pour vérifier son état ou récupérer rapidement les résultats d'opérations qu'elle a réalisées.

Vector Processing Unit 1

Image
Architecture du VPU1.

La deuxième VPU disponible, VPU1, est une version améliorée de la VPU1 avec quatre fois sa quantité de Micro Mémoire et VU Memory. En outre, cette unité comporte un composant additionnel intitulé Elementary function unit, ou 'EFU', qui accélère l'exécution des fonctions exponentielles et trigonométriques.

La VPU1 est située entre la VPU0 et la Graphics Interface (le 'portail' vers la GPU), elle comporte donc des bus additionnels pour fournir la géométrie au GPU aussi vite que possible sans utiliser le bus principal.

D'autre part, et du fait de son emplacement, la VPU1 fonctionnement uniquement en Micromode.

Il est évident que cette VPU a été conçue pour les calculs trigonométriques, et pourrait servir de préprocesseur pour la GPU. Ainsi, elle est souvent chargée de fournir les fameuses Display Lists.

Des mondes infinis

Une approche utile qui peut être exploitée avec ces unités est la génération procédurale. En d'autres termes, au lieu de construire un niveau en utilisant de la géométrie définie en amont, laissez les VPUs la générer en utilisant des algorithmes. Dans ce cas, la VPU exécute des fonctions mathématiques produisant de la géométrie qui sera ensuite interprétée par le GPU (des triangles, lignes, quadrilatères, etc) et finalement utilisée pour rendre la scène.

En comparaison avec les données explicites, le contenu procédural est idéal pour les tâches parallélisées ; cela libère de la bande passante, requiert très peu d'espace de stockage, et est dynamique (les programmeurs peuvent définir des paramètres pour obtenir des résultats différents) . De nombreuses disciplines peuvent hautement tirer parti de cette technique :

D'un autre côté, le contenu procédural peut être difficile à animer et, si l'algorithme est trop complexe, la VPU pourrait ne pas générer la géométrie à temps.

Pour résumer, le rendu procédural n'est pas une technique nouvelle, mais grâce aux VPUs, il ouvre la porte à des optimisations plus poussées et des visuels plus riches. Néanmoins, ce n'est pas une technique simple à implémenter, et la R&D de Sony a publié divers documents décrivant des approches différentes pour l'utiliser sur leur console .

Vous choisissez le workflow

Avec ces ajouts, les programmeurs ont maintenant une grande flexibilité pour concevoir leurs moteurs graphiques. Pour aller en ce sens, Sony a mobilisé des ressources supplémentaires pour imaginer et documenter des designs de pipeline efficaces. Les exemples suivants illustrent des pipelines graphiques optimisés pour différentes tâches :

Image
Design d'un pipeline parallèle.

Image
Design d'un pipeline série.

Dans le premier exemple, le design Parallèle, le processeur est combiné avec la VPU0 en macromode pour produire de la géométrie en parallèle avec la VPU1. Le groupe CPU/VPU0 utilise pleinement la Scratchpad et le cache pour éviter d'utiliser le bus principal, sur lequel la VPU1 se repose pour récupérer des données depuis la mémoire principale. A la fin, les deux groupes de rendu envoient simultanément leur Display Lists respectives au GPU.

Le second exemple, le design en Série, propose une approche différente où le groupe CPU/VPU0 travaille en tant que préprocesseur pour la VPU1. La première étape consiste à récupérer et traiter la géométrie que la VP1 va ensuite transformer en Display List.

Il s'agissait jusqu'ici d'exemples d'un point de vue théorique, mais pour expliquer une implémentation plus 'pratique', je vais faire référence à une vidéo que Jon Burton a publié au sujet du développement d'un jeu PS2 .

Image
Crash Bandicoot: The Wrath of Cortex (2001). Les particules forment la flamme de la bougie et la lumière vient de la fenêtre vitrée.

L'ancien directeur de Traveller's Tales a expliqué comment son équipe a conçu un système de particules totalement contenu dans la VPU1. En résumé, la VPU1 était concentrée sur la lecture d'une base de données préremplie sur sa mémoire VU. Cette base de données était utilisée pour calculer les coordonnées des particules à n'importe quel instant sans dépendre sur d'autres composants. Le résultat du calcul pouvait être transformé en Display Lists et envoyé aussitôt.

Avec cette approche, le processeur principal était considérablement allégé, lui permettant de prendre en charge d'autres tâches comme l'IA et la physique.

Il y a de nombreux autres exemples de disponibles, mais pour résumer : c'est désormais au programmeur de trouver une configuration optimale, et cela est une bonne chose.


Previous: 3. CPU

Next: 5. Graphismes


Rodrigo Copetti © 2026 RSS Feed

Basculer vers l'édition moderne

Accueil · Articles · Support · À propos de l'auteur · À propos du site