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.