2012-09-21 1 views
0

J'ai parcouru tous les manuels et je ne trouve pas une seule mention du Pointer d'instruction. J'en ai besoin pour un programme SPU que j'écris. Peut-être qu'il a un nom différent? Quelqu'un peut-il me dire comment je peux accéder à l'adresse de l'instruction qui doit être exécutée? Merci d'avance pour votre aide. MISE À JOUR: Apparemment, cela s'appelle le compteur de programme, mais comment puis-je y accéder à partir de mon programme SPU?SPU Instruction Pointer

+0

Sur la plupart des architectures, il est appelé le compteur de programme (PC) - Intel est un peu non conformiste dans sa nomenclature à cet égard. –

+0

Merci un million! C'est vraiment embarrassant, mais j'ai seulement fait le codage d'assemblage sur le x86. Mais j'ai une autre question: est-il possible de le lire sans que le SPU soit arrêté? – user1294986

Répondre

1

Si vous voulez juste pour obtenir le pointeur d'instruction, vous pouvez le faire dans l'assemblage:

brsl r<n>, .+4 

Cette charge l'adresse de l'instruction suivante dans le registre r<n>.

0

On dirait que vous pouvez obtenir l'instruction suivante en exécutant une opération spe_context_run:

int spe_context_run(spe_context_ptr_t spe, unsigned int *entry, unsigned int runflags, void *argp, void *envp, spe_stop_info_t *stopinfo)

entry

Entrée: Le point d'entrée, qui est la valeur initiale de la SPU pointeur d'instruction, auquel le programme SPE devrait commencer à s'exécuter. Si la valeur de l'entrée est SPE_DEFAULT_ENTRY, le point d'entrée du programme principal SPU est obtenu à partir de l'image SPE chargée. C'est habituellement l'adresse de magasin local de la fonction d'initialisation crt0 (voir le manuel de programmation de moteur à large bande de cellules, objets, exécutables, et chargement de SPE).

Sortie: pointeur d'instruction SPU au moment où l'unité SPU a arrêté l'exécution , c'est-à-dire l'adresse de stockage local de l'instruction suivante qui aurait été exécutée.

Ce paramètre peut être utilisé, par exemple, pour permettre au programme SPE à « pause » et demander une action du fil de PPE, par exemple, effectuer une opération d'E/S. Une fois cette action terminée, vous pouvez poursuivre le programme SPE en appelant à nouveau spe_context_run sans modifier l'entrée.

+0

Merci pour votre réponse, mais je voudrais le faire sur le SPU, alors que spe_context_run exécute un contexte et est sur le PPU. – user1294986

+0

Ah, donc vous exécutez un programme SPU et vous voulez obtenir le pointeur d'instruction? Veuillez mettre à jour votre question et mentionnez-la. – nneonneo

+0

Oui. Désolé de ne pas être clair là-dessus. Y a-t-il un moyen? D'après ce que j'ai lu dans les instructions, la SPU doit être désactivée pour lire le SPU_NPC, mais je voudrais le lire dans mon programme SPU. – user1294986