11
votes

Qu'est-ce que la programmation pour le processeur de cellules de PS3 implique-t-elle?

Comment la programmation pour le processeur de cellule sur le PS3 est-elle différente de celle de tout autre processeur trouvé sur un bureau normal?

Quel type de paradigmes de programmation, techniques et pratiques servent à utiliser pleinement le potentiel des processeurs de cellules?

Tous les articles que j'entends concernant le développement de PS3 discutent, "apprendre à programmer le processeur de cellules". Qu'est-ce que cela signifie vraiment au-delà d'une main agitant?

ps3

1 commentaires

Glib Réponse: "douleur et souffrance!"


4 Réponses :


14
votes

La partie cellulaire de la PS3 est composée de 6 processeurs SPU. Ils ont chacun 256 kb de mémoire non partagée et sont connectés via une bague à grande vitesse qui permet à DMA entre l'autre et le processeur hôte PowerPC. Ils ne sont pas pipelinés ou mis en cache. Cela le rend assez différent d'un X86 multi-noyau avec mémoire partagée, pipelining et cache. En outre, les processeurs SPU n'utilisent pas le même jeu d'instructions que le PowerPC, vous avez donc une asymétrie.

En bref, votre programme multithreadé de mémoire multiple typique ne laissera pas simplement tomber sur la cellule sans travailler (avec la mise en garde que l'informatique fonctionne fortement à la fabrication de différentes machines semblent être identiques afin que certains implémentatrices essaient de l'automatisation. le processus).

À un niveau élevé, le programme devra être divisé en tâches qui correspondent à la limite de mémoire dure de la cellule. Ceux-ci peuvent circuler en parallèle et chaque sous-tâche peut être séquencée vers un processeur de cellule disponible. À un niveau bas, le compilateur (ou le programmeur d'assemblage) devra travailler plus fort pour générer du code qui fonctionne rapidement sur un processeur - aucune tromperie de temps d'exécution pour que les choses puissent aller plus vite sont disponibles. La théorie étant que ces caractéristiques de programmeur / compilateur coûtent le silicium et la vitesse pouvant être mieux consacrées à vous donner plus de poids plus rapides. Bien sûr, vous n'obtenez plus de SPU sur le PS3, mais dans le cas général, vous aurez plus de suppléments par nombre de transistors disponibles sur puce.


0 commentaires

18
votes

En plus de tout George mentionne, les espaces sont vraiment mieux considérés comme des processeurs vectoriels en streaming. Ils fonctionnent mieux lorsque vous avez un algorithme qui fonctionne sur de longues séquences de données numériques, qui peuvent être alimentées par la mémoire limitée du SPU via DMA, plutôt que d'avoir le SPU charger une pièce de mémoire, essayez de le faire fonctionner, constatez qu'il a besoin Suivre un pointeur à quelque part en dehors de sa mémoire, chargez que , continuez, trouvez un autre, et ainsi de suite.

Ainsi, la programmation pour eux n'est pas un modèle simple de concurrence et de threads; Cela ressemble plus à un calcul numérique élevé ou scientifique. C'est également un accès de mémoire non uniforme pris à une extrême.

En outre, chaque processeur est en ordre avec des pipelines profonds, le programmeur doit donc être beaucoup plus conscient des dangers et des bulles d'instructions de données et toutes les nombreuses micro-optimisations que nous nous sommes dit que le compilateur "devrait" s'occuper de nous (mais ça ne veut vraiment pas). Des choses comme des branches mal exemptes, des coups de chargement, des caches misses, etc. font mal beaucoup plus que sur un processeur hors commandant qui pourrait jongler l'ordre des opérations autour de cacher ces latences.

Pour des exemples de béton, consultez Mike Acton's Blog de cellules de cellule . Mike est mon assemblée de vieille école préférée - Happy Perf Curmudgeon dans l'entreprise et il a vraiment gagné ses côtelettes sur cette question.


1 commentaires

J'adore les «3 gros mensonges» de Mike Acton's Cellerformance.beyond3d. com / Articles / 2008/03 / ... . J'ai déjà envoyé cela à mon équipe, qui comprend des jeux et des programmeurs Web. Les gars Web presque évanouis



3
votes

Tout d'accord avec George Philips et Crashworks. La seule chose que j'ajouterais, c'est que la programmation du SPU est fondamentalement sur la gestion de l'emploi. Pour tirer le meilleur parti des espaces, vous devez les conserver sur et nourrir les résultats. Il ne sert à rien d'avoir un spu à mâcher un post-traitement complexe si vous devez vous asseoir et attendre les résultats d'un cadre et que le reste de votre spus est assis. Donc, comment vous distribuez votre emploi nécessite beaucoup de pensée et cela a un impact important sur la manière dont vous avez chuté vos données.


0 commentaires

3
votes

"Tous les articles que j'entends concernant le développement de PS3 discutent," apprendre à programmer sur le processeur de cellules ". Qu'est-ce que cela signifie vraiment au-delà d'une main agitant? "

Eh bien, vous devez faire face au spus ...

  • Opérations atomiques (style d'essai sans verrouillage).
  • Strongement distinction entre les zones de mémoire. Vous devez savoir quel pointeur pointe vers quelle zone de mémoire ou vous fermerez tout.
  • Aucune distinction matérielle appliquée entre les données et le code. C'est en fait une chose amusante, vous pouvez configurer le chargement de code dynamique et essentiellement des sous-programmes de flux. Le code auto-modificateur est possible mais pas nécessairement pratique sur SPU.
  • manque de matériel de débogage matériel.
  • taille de mémoire limitée.
  • Accès rapide à la mémoire.
  • Instruction Set équilibré vers les opérations SIMD.
  • Point flottant "GOTCHAS".

    Vous voulez idéalement garder les espaces de travail utiles tout le temps, mais c'est vraiment difficile. Non seulement ils ne sont pas bien adaptés à la manipulation de certains types de problèmes, mais qui déplacent souvent un système pour être efficace sur le SPU peuvent impliquer une refonte complète. Des problèmes de débogage qui seraient faciles à attraper sur le PPU peuvent parfois prendre des jours sur SPU.

    Je pense que lorsque les gens utilisent la phrase "apprendre à programmer la cellule", ils sont principalement agitant des mains. Vous pouvez apprendre les bases d'une semaine, le défi consiste à essayer d'appliquer cette connaissance au code réel ... qui existe souvent et non sous une forme bien adaptée à une utilisation sur spu.


1 commentaires

"Vous pouvez configurer le chargement de code dynamique et essentiellement des sous-programmes d'entrée et de sortie", que vous pourriez toujours faire sur la PS2, mais généralement personne n'osait!