Accueil > Forum > > > > Aligner des données pour le SSE
Aligner des données pour le SSE
samedi 26 juillet 2008 à 11:50:20 |
Aligner des données pour le SSE

epineurien
|
Bonjour à tous ! J'ai un petit problème avec du code dont je mesure la vitesse: suivant la compilation, la vitesse varie du simple au double  . J'explique : je mesure la vitesse du code ASM si dessous, en général j'obtiens 6800ms. Si je recompile (sans changer aucune option, sans touché au code) une fois sur trois le nouvel exécutable a une vitesse de 3800ms ! Vu que les deux instructions SSE prennent la majeure partie du temps (et que les movaps semble plus lents que les movups !), je suspecte un truc au niveau de l'alignement des données. J'avais bêtement supposé que le début d'un '.data' était toujours aligné sur 128bits, et qu'il suffisait de caser toutes les données SSE au début du segment pour qu'elles restent alignées. Là, après de multiple tentative de bidouillage avec les déclarations manuelles, je rend les armes : movups reste le plus rapide, signe que je n'aligne pas correctement les données.  Donc si quelqu'un pouvait me faire la grâce d'un lien vers un cours expliquant clairement comment alignés des données sur 16 octets, je lui dit merci. Parce que je teste des trucs depuis ce matin, en suivant ce que je trouve sur le net, mais c'est toujours pas aligné ... Ma dernière tentative en date :
DataSSE SEGMENT DWORD PUBLIC 'DATA' ALIGN 4 .........données SSE (toujours des multiples de 128bits) HgXmm0 REAL4 4 Dup (0.0e0) HgXmm1 REAL4 4 Dup (0.0e0) HgBufferSSE REAL4 32 DUP (0.0e0) HgBuffer2SSE REAL4 32 DUP (0.0e0) .........données SSE (toujours des multiples de 128bits) DataSSE ENDS
Ne change strictement rien, toujours 1 chance sur 3 d'avoir un truc rapide au lieu d'un truc lent. Le code ASM :
HgCalcul PROC push edi push eax push ebx push ecx mov edi,Offset HgBuffer2SSE movaps HgXmm0,Xmm0 movaps HgXmm1,Xmm1 mov eax,HgXmm0 mov ebx,HgXmm0+4 mov ecx,HgXmm0+8 mov [edi],eax mov [edi+16],ebx mov [edi+32],ecx mov [edi+4],eax mov [edi+16+4],ebx mov [edi+32+4],ecx mov [edi+8],eax mov [edi+16+8],ebx mov [edi+32+8],ecx mov [edi+12],eax mov [edi+16+12],ebx mov [edi+32+12],ecx mov eax,HgXmm1 mov ebx,HgXmm1+4 mov ecx,HgXmm1+8 mov [edi+48],eax mov [edi+64],ebx mov [edi+80],ecx mov [edi+48+4],eax mov [edi+64+4],ebx mov [edi+80+4],ecx mov [edi+48+8],eax mov [edi+64+8],ebx mov [edi+80+8],ecx mov [edi+48+12],eax mov [edi+64+12],ebx mov [edi+80+12],ecx pop ecx pop ebx pop eax pop edi ret HgCalcul ENDP
La compilation se fait sous Visual C++ 2008, au cas où ça pourrait vous aider. Merci encore ...
Jetez un coup d'½il à mon projet de moteur 3D par lancer de rayons : http://hydrargyrum.ifrance.com.
|
|
samedi 26 juillet 2008 à 12:50:16 |
Re : Aligner des données pour le SSE

epineurien
|
Nouvelle série de test, avec :
.data DataSSE SEGMENT PAGE PUBLIC 'DATA' .... DataSSE ENDS
J'obtiens dans les 3 quarts des cas 3800ms et dans un quart 7000ms. Et apparemment, la compilation n'a rien à voir ; un même fichier exécutable peut donner les deux valeurs, suivant son humeur ... C'est de plus en plus bizarre ...
|
|
samedi 26 juillet 2008 à 18:52:53 |
Re : Aligner des données pour le SSE

BruNews
|
Regarde si ton assembleur a une directive ALIGN xxx
ciao... BruNews, MVP VC++
|
|
samedi 26 juillet 2008 à 21:54:45 |
Re : Aligner des données pour le SSE

Nukleos
|
Pourquoi ALIGN 4 et non ALIGN 16  -> 16 octets = 128 bits Patrick
|
|
dimanche 27 juillet 2008 à 08:07:42 |
Re : Aligner des données pour le SSE

BruNews
|
ah oui, je n'avais pas lu son listing. ALIGN y est, suffit donc de 16 au lieu de 4.
ciao... BruNews, MVP VC++
|
|
dimanche 27 juillet 2008 à 10:08:43 |
Re : Aligner des données pour le SSE

epineurien
|
DataSSE SEGMENT PAGE PUBLIC 'DATA' ALIGN 16
Non, j'ai toujours 6400ms ou 3900ms (1/4 de l'un et 3/4 de l'autre), sur un même '.exe' ... Désolé ...
|
|
dimanche 27 juillet 2008 à 22:06:56 |
Re : Aligner des données pour le SSE

Nukleos
|
S'il s'agit d'un problème d'alignement tu peux vérifier d'après les adresses indiquées avec un débugger. (En particulier pour HgXmm0)
a+
Patrick
|
|
lundi 28 juillet 2008 à 13:22:22 |
Re : Aligner des données pour le SSE

epineurien
|
Euh ... je ne sais pas me servir d'un débuggeur  (fait tout à la main avec des test de sorties, pas bien je sais). Il y a quoi de bien comme logiciel de débuggage ? Parce que celui de VSC++ est vraiment bordélique ... Ce que je trouve bizarre c'est que ca varie du simple au double sur un même exécutable ; normalement, soit les données sont alignées, soient elles ne le sont pas, non ? Il ne devrait y avoir aucune raison que ce soit des fois alignés et des fois non. En fait je ne suis même pas sûr que ce soit une histoire d'alignement, c'est juste que je ne voit ce que ça peut être d'autre : -movaps de même vitesse que movups (alors qu'il est sensé être plus rapide) -les deux instructions SSE prenne la majeure partie du temps (si on les virent on passe à un temps de 610ms, invariable). Mais si c'est pas l'alignement (d'aprés le net ALIGN 16 and co devraient avoir résolut le problême) je vois pas ce que cela peut être ... J'ai aussi testé une histoire avec le cache, au cas où se serait le tampon qui pose problême et pas les movaps : mov edi,Offset HgBuffer2SSE prefetchNTA BYTE PTR [edi] prefetchNTA BYTE PTR [edi+64] movaps HgXmm0,Xmm0 movaps HgXmm1,Xmm1 J'ai gagné quelques ms mais j'ai toujours ce fonctionnement à vitesse variable. Je me met en quête d'un débuggeur et d'un manuel d'utilisation ... 
|
|
mardi 29 juillet 2008 à 20:51:12 |
Re : Aligner des données pour le SSE
|
jeudi 31 juillet 2008 à 13:06:15 |
Re : Aligner des données pour le SSE

epineurien
|
This is an automatically generated Delivery Status Notification. Delivery to the following recipients failed. patrick.ruiz@tiscali.fr Désolé, ça ne marche pas .... (même les mails plantent avec moi, je suis trop balèze ).
|
|
Cette discussion est classée dans : mov, eax, edi, ecx, ebx
Répondre à ce message
Sujets en rapport avec ce message
j'ai un prob avec mon buffer ; ya pas d'amuses gueules (masm32) [ par papiboff ]
bj si je mets le buffer "somme " en dd avec charge eax et que j'ajoute deux 'dec ebx ' , ben , marche pas correctement ; (pêrqué ???? = en french) sv
[linux] read and open [ par sheorogath ]
Bonjour,je débute un peu en assembleur et j'essaie de faire un programme qui lit le début d'un fichier dont le nom est entré par l'utilisateur.Voici l
exception 13 lors du scan memoire haute [ par patatalo ]
salut, pourquoi ce code de detection de memoire en mode 32 bits sans paging me donne une exception 13 sur certaines cartes meres ( ASUS ) a l'adresse
inverser une chaine [ par MrdJack ]
salut, je suis sur un projet de calculatrice me permettant de faire des calculs avec des nombres tres grands. chaque nombre est stocké dans la memoire
Inversion de chaîne [ par Bidou ]
Bonjour à tous,A vrai dire je suis plutôt nouveau en asm et pas très bon lol. Mais bon, faut bien commencer un jour hein. Pour me faire la main, j'ai
Différences ??? [ par Arecibo ]
Voila je debute en assembleur et j'aimerais savoir quelles sont les différences entre :-> mov eax, ebx et mov eax, [ebx]-> mov esi, eax et mov [esi],
Pb registre DL [ par AlexMAN ]
Bonjour, J'ai un ptit pb avec le code qui suit, au nivo du mov dl, [ecx] ://Renvoie pointeur sur fin de chaine (permet d'eviter l'utilisation de strca
optimisation [ par sajid_morad ]
salut tout le monde , j ai une parti du code en c++, que j ai voulu optimiser , le l ai reécri en asm , mai ça donne pas grand chose, si quelqu un po
Petit problème pour comparer (cmp) [ par smok1360 ]
Bonjour à tous,Pour commencer, j'espère de ne pas avoir choisis le mauvais lieu pour poster, j'ai un petit peu hésité Donc, j'ai décidé d'apprendre l'
Recherche de fichier recursif [ par maximus4 ]
Bonjour, j'ai la procédure suivante pour la recherche récursive, le résultat est stocké dans un fichier texte. [code=autre]invoke CreateFile,offset fi
Livres en rapport
|
Derniers Blogs
CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT)CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT) par FREMYCOMPANY
Bonjour à tous, Je viens de publier une proposition comprenant 5 pseudo-classes pour le CSS Working Group ayant trait à l'état de chargement d'un élément (ex: IMG,VIDEO,AUDIO,OBJECT pour l'HTML.). Si le c½ur vous en dit, vous pouvez retrouver cette p...
Cliquez pour lire la suite de l'article par FREMYCOMPANY MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ?MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ? par ROMELARD Fabrice
Formation initiale Durant la formation, le découpage classique est le suivant (je donnerai les équivalences Suisse lorsque je les connaîtrais) : Ecole primaire jusqu'au Collège : Formation générale permettant d'obtenir les méthodes...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice Y'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENTY'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENT par Aleks
Quand on a ce genre d'erreur sans log :
Et bas on a juste envie de choper le gas de Microsoft qu'a développé ça et lui foutre des baffes de Coboye ! ...
Cliquez pour lire la suite de l'article par Aleks [HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL[HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL par Pierrick CATRO-BROUILLET
Avec la sortie prochaine de la Beta Consumer Preview de Windows 8, j'avais envie de revenir sur une des fonctionnalités que j'attends le plus et que, en bon geek que je suis, j'utilise déjà : Hyper-V 3 ainsi son module PowerShell.
Il y a déjà pléthor...
Cliquez pour lire la suite de l'article par Pierrick CATRO-BROUILLET IIS7 - COMPRESSION GZIPIIS7 - COMPRESSION GZIP par cyril
La compression GZIP permet d'améliorer les performances de navigation en compressant ce qu'envoie le serveur à un client. Pour comprendre comment cela fonctionne, regardons ce qu'il se passe au niveau HTTP lorsqu'un client tente d'accéder à une ress...
Cliquez pour lire la suite de l'article par cyril
Logiciels
Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning Academy System (17.1.3.0)ACADEMY SYSTEM (17.1.3.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|