PYRHON
Messages postés7Date d'inscriptionvendredi 16 décembre 2011StatutMembreDernière intervention27 décembre 2012 9 oct. 2012 à 13:31
J'ai pas bien compris la réponse de BruNews qui laisserait supposer que les instructions sur String ne serviraient plus ou ne seraient plus utilisables, car LODSB et autres instructions du même type, fonctionne dans tous les modes, Réel, Protegé, 64 bits ou pas, et même en SMM.
Salut...
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 9 oct. 2012 à 18:10
Bien entendu que fonctionne encore mais contre productif.
Une boucle bien construite (entrelacement des instructions pour éviter les 'stall'):
mov ecx, N
goLOOP:
...
...
sub ecx, 1
jnz short goLOOP
sera à tout coup plus performante que REP LODSB et autres trucs du siecle dernier.
C'est comme utiliser encore la FPU alors qu'il y a SSE quand ce n'est pas AVX.
Guilou34
Messages postés142Date d'inscriptionmercredi 5 avril 2006StatutMembreDernière intervention29 janvier 20161 23 oct. 2012 à 00:51
En réalité,je pense que Brunews est certainement très compétant en programmation mais qu'il néglige ou ignore le fonctionnement intime d'une unité centrale.
Les instructions dont il s'agit sont, en effet, loin d'être obsolètes.
Voici un exemple datant du siècle dernier :
?
MOV SI,FROM
MOV DI,TO
MOV CX,65535
REP MOSW
?
Cette dernière instruction déplace,à elle seule, 65535 mots depuis l'emplacement de mémoire pointé par SI vers celui pointé par DI
(Turbo Assembler Users' Guide page 184,1988)
En fait, MOSW réalise en 7 microcycles les opérations suivantes:
MOV [SI],[DI] (4 cycles)
SI=SI+1, DI=DI+1, CX=CX-1 (1 cycle)
REP répéter MOSW si CX n'est pas nul (2 cycles).
Comment cela est-il possible ? Voir "Microprogrammation" sur Wikipedia.
Cette technique qui a été introduite sur les miniordinateurs au milieu des années 60, permet en effet de réaliser au sein même de l'unité centrale des opérations simultanées.
Amicalement.
Vous n’avez pas trouvé la réponse que vous recherchez ?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 27 oct. 2012 à 22:11
No probleme, pas de molémique mais une discussion intéressante.
Fortran a évolué au cours des ans et il existe toujours. Un de ses principaux promoteurs à ma connaissance est Intel qui fournit des libs optimisées pour Fortran dans sa Math Kernel Library.
Ce qui suit ne traitera que de l'architecture Intel x86 (en 32 ou 64).
Quand je parle des 3 canaux des CPUs, c'est sur 1 même CPU. Si on distribue un traitement sur plusieurs CPUs (ou CORE), on parlera de multithreading.
Le Pentium de 1993 introduit la notion de 2 canaux.
Exec1, canal 1: mov eax, ecx
Exec1, canal 2: add edx, 2
canal2 s'exécute en simultané à canal1. Ceci n'est malheureusement pas vrai à tout coup, ce serait trop beau. C'est tout l'art d'entrelacer correctement les instructions.
Il est clair que:
lea edx, [edx + eax*4 - 4]
lea edx, [edx + ecx*4]
ne passera pas en 1 op multi canal (parallélisation d'instructions), la seconde instruction étant dépendante du résultat de la premiere.
Il y a une importante littérature sur la parallélisation des instructions, lire Michael Abrash (et autres).
goLOOP:
..
..
sub ecx, 1
jnz short goLOOP
Aucun malaise sur "remontée" à goLOOP, les unités de prefetch actuelles font cela à merveille.
J'ai fait un exemple comparatif "REP MOVSQ" vs boucle sur ecx.
http://brunews.com/cpycmp.zip Code et exe (Windows x64) sont dans le zip.
J'alloue 3 pages mémoire (pDATA, pA, pB), bouton lance copie de pDATA vers pA par REP MOVSQ, autre bouton copie de pDATA vers pB par MOVDQA.
Sur CoreI7 950, 12 Go RAM:
MOVDQA : 253 ticks
REP MOVSQ : 302 ticks, ce qui fait 19.36 % de plus.
A noter aussi que RSI et RDI ne sont pas des registres "generaux", on doit les restituer en sortie de fonction tels qu'on les a trouvés, ce n'est pas à négliger. Quand on écrit la boucle soi meme, on utilise les registres qu'on a de dispo sur le moment, rien d'imposé.
rcx : addr source
rdx : addr dest
eax : nbr de fois 48 octets
Ici j'utilise les 3 canaux des CPUs d'aujourd'hui sans aucun STALL, 48 octets par tour.
Va donc vérifier si le "Intel XE 2013" genere des 'REP xxx', faut pas y songer.
Le fonctionnement intime des années 60 ne doit plus sortir des musées.
ToutEnMasm
Messages postés587Date d'inscriptionjeudi 28 novembre 2002StatutMembreDernière intervention13 décembre 20223 24 oct. 2012 à 14:58
Petite info,
Avec les nouveaux matériels il semblerait que
For legacy mode, Load byte at address DS:(E)SI into AL.
For 64-bit mode load byte at address (R)SI into AL.
Ces antiquités sont à oublier.
soit erroné.Après des tests de rapidité sur le masm32 forum,ces intrustions sont devenus plus rapides pour certain matériel.
En gros,elles redeviennent à la mode.
Guilou34
Messages postés142Date d'inscriptionmercredi 5 avril 2006StatutMembreDernière intervention29 janvier 20161 27 oct. 2012 à 02:55
@ Brunews
J'avoue ne pas être compétant en 64 bits et encore moins en multiprocesseurs. Mais le fragment de code que j'ai cité existe aussi sous la forme REP MOVSD en 32 Bits et REP MOVSQ pour le 64.
Par rapport à ce qui date de 50 ans, le fait de passer de 16 bits en 64 bits ne change en rien le fonctionnement intime d'un processeur. Quant au fait de pouvoir distribuer l'exécution d'un programme entre trois processeurs parallèles, je m?interroge : est- ce qu'on ne pourrait pas, dans ton morceau de code, utiliser avantageusement trois MOVSQ ? Et le saut en arrière JNZ short cpy48, ne risque-t-il pas, s'il est mal placé, d'obliger le processeur à recharger sa pile à partir de la mémoire centrale ? Ce qui n'a jamais lieu avec le REP.
Je tiens à préciser que je ne cherche pas du tout à polémiquer : je n'ai pas de réponse à ces questions et je cours mêmele risque qu'elles soient stupides. En fait, je suis d'une époque où à l'achat d'un mini computeur, on recevait une caisse de documentation qui en décrivait le fonctionnement dans le détail, une shématèque avec l'emplacement de chaque circuit intégré, le nom de tous les signaux qui passaient d'une carte à l'autre et d'une armoire à l'autre. C'est avec l'arrivée du PC que j'ai été confronté avec cette horreur qui s'appelle la rétention d'information dans le seul but de se rendre indispensable.
Enfin, cher Brunews, en recherchant sur Google des renseignements sur les 64 bits, j'ai été surpris de trouver le mot « Fortran ». Est-ce vraiment le nom du compilateur que j'ai utilisé avec l'assembleur dans les années soixante du siècle dernier ?
Amicalement.