Ordonnancement, cœurs et événements · Leçon 26 sur 30 · environ 15 minutes
Répartir le travail entre des cœurs
Divisez des travaux indépendants et combinez leurs résultats.
01 / Expliquer
Comprendre l’idée
Plusieurs cœurs peuvent exécuter différentes tâches indépendamment. On peut répartir les travaux indépendants avant l’exécution : un traitement prend les travaux d’indices pairs et un autre ceux d’indices impairs. Il faut toujours une méthode commune pour combiner les résultats.
Le laboratoire des systèmes utilise une machine virtuelle distincte pour chaque voie de cœur. Ce défi calcule la même répartition successivement sur une seule machine ; ses sorties vérifient la décomposition sans prétendre à une exécution matérielle parallèle. Évitez les écritures partagées quand des emplacements de résultats indépendants suffisent.
02 / Essayer
Observer le fonctionnement
Le traitement des indices pairs utilise les adresses 0 et 2 : 1² + 3² = 10. La vue des systèmes montre les deux voies de traitement.
STORE 1 0
STORE 2 1
STORE 3 2
STORE 4 3
LOAD [0]
MUL R0
COPY R0 R1
LOAD [2]
MUL R0
ADD R1
PRINT
HALTAvancez pas à pas pour suivre une instruction à la fois. Vous pouvez modifier l’exemple et le rejouer.
03 / Défi
Le faire fonctionner
Quatre valeurs de travaux sont préparées en mémoire 0 à 3. Le traitement pair calcule valeur[0]² + valeur[2]² ; le traitement impair calcule valeur[1]² + valeur[3]². Appelez les deux. Affichez le total pair, le total impair et le total combiné, dans cet ordre.
Le vérificateur exécute votre programme actuel de l’éditeur sur une nouvelle machine pour chacun des 3 cas de test. Il fournit lui-même les entrées et la mémoire préparée ; la sortie et la mémoire actuelles du laboratoire ne décident pas du résultat.
CALL evenWorker
PRINT
CALL oddWorker
PRINT
LOAD R1
ADD R2
PRINT
HALT
evenWorker:
#
RETURN
oddWorker:
#
RETURNBesoin d’un indice ?
Calculez chaque carré dans R0, gardez le premier dans le registre de résultat du traitement, puis ajoutez le deuxième.
Afficher une solution expliquée
Lisez le programme, prévoyez l’effet de chaque instruction, puis suivez-le pas à pas dans le laboratoire.
CALL evenWorker
PRINT
CALL oddWorker
PRINT
LOAD R1
ADD R2
PRINT
HALT
evenWorker: LOAD [0]
MUL R0
COPY R0 R1
LOAD [2]
MUL R0
ADD R1
COPY R0 R1
RETURN
oddWorker: LOAD [1]
MUL R0
COPY R0 R2
LOAD [3]
MUL R0
ADD R2
COPY R0 R2
RETURNLaboratoire du processeur en émojis
Programme en émojis
Saisissez LOAD, ADD ou un autre nom d’instruction, puis Espace pour insérer l’émoji. Ctrl/⌘ + Entrée exécute ou suspend ; Échap suspend ; Ctrl/⌘ + ] indente. Tab déplace le focus. Les étiquettes utilisent deux-points. Les sauts utilisent des adresses d’instructions à partir de zéro.
Carte des instructions et points d’arrêt (0)
Un point d’arrêt suspend avant son instruction. Exécuter franchit une fois le point d’arrêt actuel ; Pas à pas exécute directement son instruction. Modifier le code efface les anciens points d’arrêt et l’état machine.
Registres du processeur
- R0
- 0
- R1
- 0
- R2
- 0
- R3
- 0
- R4
- 0
- R5
- 0
- R6
- 0
- R7
- 0
Piles et cadres de boucle
SP = 255 − profondeur des données − profondeur des appels. La pile est distincte de la mémoire.
Pile de données (bas → haut)
Vide
Adresses de retour des appels (bas → haut)
Vide
Cadres de boucle
Vide
Sorties et entrées
Exécutez une instruction PRINT pour voir une sortie.
Entrées en attente: Vide
Mémoire · 256 octets · 0 non nuls
Chaque case indique adresse:valeur. R = lecture à ce pas ; W = écriture à ce pas. Sélectionnez une case pour l’examiner ou l’initialiser avant l’exécution. Les flèches déplacent la sélection, Début/Fin visent les extrémités de la ligne et Ctrl/⌘ + Début/Fin celles de toute la mémoire.
Trace d’exécution · 0 entrées
Les entrées récentes sont ci-dessous. Examinez n’importe quel indice à partir de zéro pour voir les états complets et indépendants avant et après.
Vérifier votre défi
Vous pouvez lancer cette vérification à tout moment. Tous les cas doivent réussir pour enregistrer la leçon comme terminée.
La progression utilise seulement localStorage. Elle reste dans ce navigateur et n’est jamais envoyée à un serveur.