Provided by: manpages-fr-dev_3.27fr1.4-1_all bug

NOM

       spu_run - Executer un contexte SPU

SYNOPSIS

       #include <sys/spu.h>

       int spu_run(int fd, unsigned int *npc, unsigned int *event);

DESCRIPTION

       L'appel  systeme  spu_run()  est  utilise  sur les PowerPC disposant de
       l'architecture du processeur  Cell  dans  le  but  d'acceder  aux  SPUs
       (Synergistic  Processor  Units).  L'argument  fd  est un descripteur de
       fichiers retourne par spu_create(2) qui se refere  a  un  contexte  SPU
       specifique. Lorsque le contexte est livre a un SPU physique, il demarre
       son execution au pointeur d'instruction passe a npc.

       L'execution du code SPU se fait de maniere  synchrone.  C'est  pourquoi
       spu_run()  est bloquant tant que le SPU fonctionne. S'il est necessaire
       d'executer du code SPU en parallele avec d'autres codes,  que  se  soit
       sur le processeur principal ou sur d'autres SPU, un nouveau thread doit
       d'abord etre cree (par exemple en utilisant pthread_create(3)).

       Lorsque spu_run() revient, la valeur courante du pointeur d'instruction
       SPU  est  ecrite  a  npc,  donc il est possible d'appeller spu_run() de
       nouveau avec le meme pointeur npc.

       Le parametre event fournit un tampon pour un code d'etat etendu. Si  le
       contexte  SPU  a ete cree avec l'attribut SPU_CREATE_EVENTS_ENABLED, ce
       tampon sera rempli par le noyau Linux avant que spu_run() revienne.

       Le code d'etat peut etre l'une (ou plus) des constantes suivantes :

       SPE_EVENT_DMA_ALIGNMENT
              Une erreur d'alignement DMA s'est produite.

       SPE_EVENT_INVALID_DMA
              Une commande MFC DMA invalide a ete tentee.

       SPE_EVENT_SPE_DATA_STORAGE
              Une erreur de stockage DMA s'est produite.

       SPE_EVENT_SPE_ERROR
              Une instruction illegale a ete executee.

       NULL est une valeur valable pour le parametre event. Dans ce  cas,  les
       evenements ne seront pas remontes au processus appelant.

VALEUR RENVOY'EE

       En  cas  de succes, spu_run() renvoie la valeur du registre spu_status.
       En cas d'erreur l'appel renvoie -1 et positionne errno a l'un des codes
       d'erreur listes ci-dessous.

       La  valeur  du  registre  spu_status  est  un  masque  de  bits de code
       d'erreurs et en option d'un code de retour  de  14  bits  provenant  de
       l'instruction  stop-and-signal  du SPU. Les bits des masques du code de
       retour sont :

       0x02   Le SPU a ete stoppe par une instruction stop-and-signal.

       0x04   Le SPU a ete arrete par une instruction halt.

       0x08   Le SPU est en attente d'un canal.

       0x10   Le SPU est en mode single-step.

       0x20   SPU a essaye d'executer une instruction non valable.

       0x40   SPU a essaye d'acceder a un canal non valable.

       0x3fff0000
              Les bits masques avec cette valeur contiennent le  code  renvoye
              par  une  instruction stop-and-signal. Ces bits ne sont valables
              que si le bit 0x02 est positionne.

       Si spu_run() ne renvoie pas d'erreur, au moins  un  des  huit  bits  de
       poids faible est toujours positionne.

ERREURS

       EBADF  fd n'est pas un descripteur de fichier valable.

       EFAULT npc  n'est  pas un pointeur valable ou event n'est ni NULL ni un
              pointeur valable.

       EINTR  Un signal est  apparu  pendant  la  progression  de  spu_run() ;
              consultez  signal(7).  La  valeur  npc  a  ete  mise a jour a la
              nouvelle valeur du compteur de programme si necessaire.

       EINVAL fd n'est pas un  descripteur  de  fichier  valable  renvoye  par
              spu_create(2).

       ENOMEM Il  n'y  a pas suffisamment de memoire disponible pour gerer une
              faute de page resultant d'un acces direct a la memoire d'un  MFC
              (<< Memory Flow Controller >>).

       ENOSYS La  fonctionnalite n'est par fournie par le systeme actuel parce
              que le materiel ne fournit pas de SPU ou  parce  que  le  module
              spufs n'est pas charge.

VERSIONS

       L'appel systeme spu_run() est apparu dans Linux 2.6.16.

CONFORMIT'E

       Cet  appel  systeme est specifique a Linux et implemente uniquement sur
       l'architecture PowerPC. Les programmes  qui  l'utilisent  ne  sont  pas
       portables.

NOTES

       La  glibc  ne fournit pas de fonction pour cet appel systeme : utilisez
       syscall(2) pour l'appeler. Notez cependant que spu_run() est concu pour
       etre  appele  depuis  des  bibliotheques qui implementent une interface
       plus abstraite pour les SPU, pas pour etre appele directement  par  les
       applications                     normales.                    Consultez
       http://www.bsc.es/projects/deepcomputing/linuxoncell/     pour      les
       bibliotheques recommandees.

EXEMPLE

       Vous  trouverez  ci-dessous un exemple pour lancer un programme simple,
       d'une instruction SPU, utilisant l'appel systeme spu_run().

       #include <stdlib.h>
       #include <stdint.h>
       #include <unistd.h>
       #include <stdio.h>
       #include <sys/types.h>
       #include <fcntl.h>

       #define handle_error(msg) \
           do { perror(msg); exit(EXIT_FAILURE); } while (0)

       int main(void)
       {
           int context, fd, spu_status;
           uint32_t instruction, npc;

           context = spu_create("/spu/example-context", 0, 0755);
           if (context == -1)
               handle_error("spu_create");

           /* write a 'stop 0x1234' instruction to the SPU's
            * local store memory
            */
           instruction = 0x00001234;

           fd = open("/spu/example-context/mem", O_RDWR);
           if (fd == -1)
               handle_error("open");
           write(fd, &instruction, sizeof(instruction));

           /* set npc to the starting instruction address of the
            * SPU program. Since we wrote the instruction at the
            * start of the mem file, the entry point will be 0x0
            */
           npc = 0;

           spu_status = spu_run(context, &npc, NULL);
           if (spu_status == -1)
               handle_error("open");

           /* we should see a status code of 0x1234002:
            *   0x00000002 (spu was stopped due to stop-and-signal)
            * | 0x12340000 (the stop-and-signal code)
            */
           printf("SPU Status: 0x%08x\n", spu_status);

           exit(EXIT_SUCCESS);
       }

VOIR AUSSI

       close(2), spu_create(2), capabilities(7), spufs(7)

COLOPHON

       Cette page fait partie de  la  publication  3.27  du  projet  man-pages
       Linux.  Une description du projet et des instructions pour signaler des
       anomalies      peuvent      etre       trouvees       a       l'adresse
       <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

       Depuis  2010,  cette  traduction est maintenue a l'aide de l'outil po4a
       <URL:http://po4a.alioth.debian.org/>   par   l'equipe   de   traduction
       francophone        au        sein        du       projet       perkamon
       <URL:http://perkamon.alioth.debian.org/>.

       Julien   Cristau   et   l'equipe   francophone   de    traduction    de
       Debian (2006-2009).

       Veuillez   signaler   toute   erreur   de   traduction  en  ecrivant  a
       <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
       paquet manpages-fr.

       Vous  pouvez  toujours avoir acces a la version anglaise de ce document
       en utilisant la commande << man -L C <section> <page_de_man> >>.