Man page - spu_run(2)

Packages contains this manual

Available languages:

en fr ja ru

Manual

spu_run

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
VALEUR RENVOYÉE
ERREURS
STANDARDS
HISTORIQUE
NOTES
EXEMPLES
VOIR AUSSI
TRADUCTION

NOM

spu_run - Exécuter un contexte SPU

BIBLIOTHÈQUE

BibliothĂšque C standard ( libc , -lc )

SYNOPSIS

#include <sys/spu.h> /* Définition des constantes SPU_* */
#include <sys/syscall.h>
/* Définition des constantes SYS_* */
#include <unistd.h>

int syscall(SYS_spu_run, int fd , uint32_t * npc , uint32_t * event );

Remarque : la glibc ne fournit pas d’enveloppe pour spu_run (), imposant l’utilisation de syscall (2).

DESCRIPTION

L’appel systĂšme spu_run () est utilisĂ© sur les PowerPC disposant de l’architecture du processeur Cell dans le but d’accĂ©der aux SPUs (Synergistic Processor Units). L’argument fd est un descripteur de fichiers renvoyĂ© par spu_create (2) qui se rĂ©fĂšre Ă  un contexte SPU spĂ©cifique. Lorsque le contexte est livrĂ© Ă  un SPU physique, il dĂ©marre son exĂ©cution au pointeur d’instruction passĂ© Ă  npc .

L’exĂ©cution du code SPU se fait de maniĂšre synchrone. C’est pourquoi spu_run () est bloquant tant que le SPU fonctionne. S’il est nĂ©cessaire d’exĂ©cuter du code SPU en parallĂšle avec d’autres codes, que se soit sur le processeur principal ou sur d’autres SPU, un nouveau thread doit d’abord ĂȘtre créé (par exemple en utilisant pthread_create (3)).

Lorsque spu_run () revient, la valeur courante du pointeur d’instruction SPU est Ă©crite Ă  npc , donc il est possible d’appeler spu_run () de nouveau avec le mĂȘme pointeur npc .

Le paramĂštre event fournit un tampon pour un code d’état Ă©tendu. Si le contexte SPU a Ă©tĂ© créé avec l’attribut SPU_CREATE_EVENTS_ENABLED , ce tampon sera rempli par le noyau Linux avant que spu_run () revienne.

Le code d’état peut ĂȘtre 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 été tentée.

SPE_EVENT_SPE_DATA_STORAGE

Une erreur de stockage DMA s’est produite.

SPE_EVENT_SPE_ERROR

Une instruction illégale a été exécutée.

NULL est une valeur valable pour le paramÚtre event . Dans ce cas, les événements ne seront pas remontés au processus appelant.

VALEUR RENVOYÉE

En cas de succĂšs, spu_run () renvoie la valeur du registre spu_status . En cas d’échec, l’appel renvoie -1 et errno est dĂ©fini pour indiquer l’erreur.

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 été stoppé par une instruction stop-and-signal .

0x04

Le SPU a Ă©tĂ© arrĂȘtĂ© par une instruction halt .

0x08

Le SPU est en attente d’un canal.

0x10

Le SPU est en mode single-step.

0x20

SPU a essayĂ© d’exĂ©cuter une instruction non valable.

0x40

SPU a essayĂ© d’accĂ©der Ă  un canal non valable.

0x3fff0000

Les bits masqués avec cette valeur contiennent le code renvoyé par une instruction stop-and-signal . Ces bits ne sont valables que si le bit 0x02 est positionné.

Si spu_run () ne renvoie pas d’erreur, au moins un des huit bits de poids faible est toujours positionnĂ©.

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 été mise à jour à la nouvelle valeur du compteur de programme si nécessaire.

EINVAL

fd n’est pas un descripteur de fichier valable renvoyĂ© par spu_create (2).

ENOMEM

Il n’y a pas suffisamment de mĂ©moire disponible pour gĂ©rer une faute de page rĂ©sultant d’un accĂšs direct Ă  la mĂ©moire d’un MFC (« Memory Flow Controller »).

ENOSYS

La fonctionnalitĂ© n’est par fournie par le systĂšme actuel parce que le matĂ©riel ne fournit pas de SPU ou parce que le module spufs n’est pas chargĂ©.

STANDARDS

Linux sur PowerPC.

HISTORIQUE

Linux 2.6.16.

NOTES

spu_run () est conçu pour ĂȘtre appelĂ© depuis des bibliothĂšques qui implĂ©mentent une interface plus abstraite pour les SPU, pas pour ĂȘtre appelĂ© directement par les applications normales. Consultez http://www.bsc.es/projects/deepcomputing/linuxoncell/ pour les bibliothĂšques recommandĂ©es.

EXEMPLES

Vous trouverez ci-dessous un exemple pour lancer un programme simple, d’une instruction SPU, utilisant l’appel systùme spu_run ().

#include <err.h>
#include <fcntl.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main(void)
{
int context, fd, spu_status;
uint32_t instruction, npc;
context = syscall(SYS_spu_create, "/spu/example-context", 0, 0755);
if (context == -1)
err(EXIT_FAILURE, "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)
err(EXIT_FAILURE, "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 = syscall(SYS_spu_run, context, &npc, NULL);
if (spu_status == -1)
err(EXIT_FAILURE, "open");
/*
* We should see a status code of 0x12340002:
* 0x00000002 (spu was stopped due to stop-and-signal)
* | 0x12340000 (the stop-and-signal code)
*/
printf("SPU Status: %#08x\n", spu_status);
exit(EXIT_SUCCESS);
}

VOIR AUSSI

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

TRADUCTION

La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org> et Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n’y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org .