Site WWW de Laurent Bloch
Slogan du site

ISSN 2271-3905
Cliquez ici si vous voulez visiter mon autre site, orienté vers des sujets moins techniques.

Pour recevoir (au plus une fois par semaine) les nouveautés de ce site, indiquez ici votre adresse électronique :

Forum de l’article

Mon premier programme en assembleur RISC-V

modération a priori

Ce forum est modéré a priori : votre contribution n’apparaîtra qu’après avoir été validée par un administrateur du site.

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.

Lien hypertexte

(Si votre message se réfère à un article publié sur le Web, ou à une page fournissant plus d’informations, vous pouvez indiquer ci-après le titre de la page et son adresse.)

Rappel de la discussion
Mon premier programme en assembleur RISC-V
Robert Ehrlich - le 20 décembre 2021

Avec beaucoup de retard, puisqu’on t’a proposé des améliorations, j’y vais aussi de la mienne. Elle repose essentiellement sur ta remarque : Un accès mémoire, en 2021, c’est le temps de 100 à 200 instructions.

Dans ta dernière version, les deux premières instructions de la boucle principale sont deux accès mémoire, le second étant dépendant du premier, il ne peut s’exécuter que quand le premier est terminé et que l’octet souhaité est donc bien présent dans x28. L’exécution de la deuxième instruction reste donc bloquée le temps d’un accès mémoire. Vu l’architecture pipe-line, il n’est pas clair que ça bloque aussi les suivantes, mais on a plus de chances que ça marche si les instructions qui suivent la première ne nécessitent pas la présence de l’octet dans x28.

Je suggère donc de remonter les 2 instructions d’incrémentation "addi x12, x12, 1" et "addi x13, x13, 1" entre le "lbu" et le "sb". Evidemment, comme entre temps x13 a été incrémenté, la dernière devient "sb x28, -1(x13)".

Il semble d’ailleurs, d’après la réponse de Michel Billaud, que le compilateur C soit adepte de cette stratégie, mais pas à fond, puisqu’il insère une incrémentation entre les deux accès alors qu’il aurait pu en caser deux. Je ne comprends pas bien sa remarque sur les pointeurs sur les précédents, de toute façon l’addition du déplacement au registre d’adresse s’effectue, elle prend le même temps, que le déplacement soit positif, négatif ou nul.

Mon premier programme en assembleur RISC-V
Laurent Bloch - le 20 décembre 2021

Robert, je savais que je pouvais m’attendre de ta part à une lecture attentive et à des corrections. Merci !

Derniers commentaires

Une illustration de la concurrence monopolistique
Attention : les GPU sont très forts en produits scalaires, (en multiplication de matrices par (...)

Python
"on dit plutôt maintenant développeurs" ... Il y a (au moins) deux expressions qui (...)

À la Commission de développement de l’informatique du Ministère des Finances
Article tout aussi instructif que plaisant à lire. On pensera aussi à "Comédies Françaises", (...)

À la Commission de développement de l’informatique du Ministère des Finances
Dans le style qui t’est caractéristique, j’avoue que j’ai bien aimé ! J’ai même eu l’occasion (...)

Informatique confidentielle
La clé pour comprendre est peut-être qu’il s’agit ici de "machine virtuelle" et non de (...)