On Monday 02 September 2002 01:05, Marc Mongenet wrote:

> Sur un microprocesseur moderne je ne suis pas s�r que ce soit
> possible. Avec le pipelining, la multi-scalarit�, les pr�dictions
> de branchement, les caches miss (L1/L2, instructions/donn�es, TLB),
> les probl�mes d'alignement, les chargements sp�culatifs, les d�pendances
> d'acc�s aux registres, les 100 autres instructions qui �tait "in-fly"
> avant...

Je voulais sim[lement parler du nombre de cycle "th�orique" de chacune de ces 
instructions. Ce nombre de cycles varie fortement suivant les instructions et 
chacun des modes d'adressages sur les processeurs CISC. Alors, qu'avec des 
processeurs RISC, le nombre de cycle pour ex�cuter une instruction est fixe; 
mis � part les instructions FP (+-* & /). Cette comparaison est quand m�me 
utile puisque, dans le cas qui nous a pr�occup� ces derniers jours, on compte 
le nombre d'instruction � l'int�rieur de chaque boucle. Comm il est 
n�cessaire de ne manipuler que des valeurs dans des registres, afin de 
b�n�ficier des meilleures performances, tout le monde est log� � la m�me 
enseigne. De plus, on examine uniquement l'ex�cution des instructions sans 
tenir compte des caches, TLB et autres technologies; qui ne sont quasi pas 
�pr�dictibles" au niveau des temps d'ex�cution.

En ce qui concerne les processeurs RISC, il existe certainement beaucoup de 
diff�rences entre les diff�rents CPUs et version de compilateurs. je ne peux 
donner que des infos concernant les pocesseurs HP-PA 2.0. L'analyse di code 
assembleur est particuli�rement difficile car l'optimisation se fait d�j� au 
niveau des expressions C et ensuite au niveau de l'architecture du CPU. Comme 
sur HP-PA 2.0, toutes les unit�s fonctionnelles sont doubl�es, le 
compilateurs va essayer de // le code quand cela est possible (ou rentable). 
J'ai du tricher un peu dans le nombre de boucles � effectuer car sans cela le 
compilateur me "d�eroulait" le code afin d'utiliser un maximum d'unit�s 
fonctionnelles. De plus HP-PA dispose d'op�ration "compound" qui font quatre 
choses en m�me temps; par exemple ADDIB effectue une adition, une 
assignation, un test et un branchement. Cette instruction est massivement 
utilis�e dans les boucles "for" mais son placement et sa combinaison avec les 
autres instructions est moins �vidente que pour le code d'un processeurs 
CISC. Pour exemple, je vous libre le code assembleur g�n�rer pour un HP-PA 
2.0 sous HP-UX 11.0, � partir du code :

    for(i = 0; i < 2048; i++)
    {
        r += w & 0xff;
        w >>= 16;
    }

Notez que j'ai du d�finir le nombre de boucles � 2048 (32 ou 64 aurait sans 
doute suffit), car sans cela, j'aurais eu, non plus une boucle, mais un 
paquet de lignes avec EXTRW et ADD. La derni�re instruction EXTRW %31, 15... 
est effectu�e en m�me temps que le test de ADDIB et est nullifi�e au cas ou 
le branchement vers $00000003 ne s'effectue pas (fin de boucle). Donc les 
deux EXTRW sont effectu�s l'un d�rri�re l'autre, puis l'addition (r + w...) 
et enfin l'assignation (r = ) avec l'incr�mentattion ete le test de fin de 
boucle (i++, i < 2048). 

$00000003
        EXTRW,U %r31,31,8,%r24  ;offset 0x10
        ADD,L   %r28,%r24,%r28  ;offset 0x14
$00000001
        ADDIB,<>        1,%r23,$00000003        ;offset 0x18
        EXTRW,U %r31,15,16,%r31 ;offset 0x1c

Il est difficile de penser plus compact :-) Par contre il est certain que la 
forme du code pour Itanium serait totalemnt diff�rente. Pourquoi ? Pour 
pouvoir // encore plus le contenu de la boucle � l'aide de la focntionalit� 
qui permet de d�caler tous les registres � chaque it�raton de la boucle. 
Itanium serait alors capable d'effectuer le calcul pour 4 it�rations d'une 
boucle � la fois !!!

> D'apr�s ce que j'ai cru comprendre (notemment des mauvaises surprises avec
> l'Itanium) m�me les simulateurs des fabriquants ne donnent pas des
> r�sultats fiables.

Quel fabricants ? Il n'y a qu'un seil fabricant (Intel) et une soci�t� qui 
poss�de des simulateurs depuis bient�t 10 ans (HP), qui se trouve �tre celle 
qui ma�trise le mieux les compilateurs de cette architecture... et le 
concepteur du jeux d'instructions... Je ne doute pas que les gens qui sont au 
coeur des optimiseurs de gcc se mettront rapidement � niveau, mais il faudra 
du temps car c'est une technologie hyper pointue et pas facile � maitriser. 
Je RE-encourage tous le monde � lire les articles mentionn�s en juin dans 
l'un de mes mails; afin de comprendre la complexit� de ce qu'est l'assembleur 
sur Itanium.  �a fait un moment que je ne fais plus d'assembleur, mais l� je 
laisse compl�tement tomber :-)

http://www.hp.com/products1/itanium/infolibrary/whitepapers/ia64_overview_wp.html      
http://www.hp.com/products1/itanium/infolibrary/whitepapers/os_compiler.pdf
http://www.hp.com/products1/itanium/chipset/analyst_report.pdf

Daniel




--
http://www-internal.alphanet.ch/linux-leman/ avant de poser
une question. Ouais, pour se d�sabonner aussi.

Répondre à