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
LINQ TO ENTITIESLINQ TO ENTITIES par Matthieu MEZIL
Cette semaine je suis à Montréal en tant que speaker sur Entity Framework pour l'évènement confoo . J'en profite pour remercier les organisateurs de cet évènement de m'avoir fait confiance et Access-IT de m'avoir permis d'y participer. En parallèle, j'ai ...
Cliquez pour lire la suite de l'article par Matthieu MEZIL FAIRE APPARAITRE L'ONGLET 'DéVELOPPEUR' DANS OFFICE 2010FAIRE APPARAITRE L'ONGLET 'DéVELOPPEUR' DANS OFFICE 2010 par neodante
La nouvelle interface d'Office 2010 à amener quelques modifications par rapport à celle de 2007. Certes mineures, ces modifications ont fait disparaître la case à cocher de l'onglet 'Développeur' en première page du panneau du 'bouton Office' (dans Office...
Cliquez pour lire la suite de l'article par neodante [ASTUCE] PATCH POUR MICROSOFT FORUMS NNTP BRIDGE V1[ASTUCE] PATCH POUR MICROSOFT FORUMS NNTP BRIDGE V1 par pierre
Si vous avez téléchargé comme moi Microsoft Forums NNTP Bridge V1 avant le 11 mars 2010 (voir [Astuce] Disponibilité de Microsoft Forum NNTP Bridge Version 1.0), un problème de date localisée pour les non anglais était présent. Un patch est disponibl...
Cliquez pour lire la suite de l'article par pierre PB LORS DE L'INSTALLATION SHAREPOINT 2010.PB LORS DE L'INSTALLATION SHAREPOINT 2010. par Patrick Guimonet
Lors de l'installation de SharePoint 2010, j'ai rencontré un problème de plantage à l'étape 5 du configuration Wizard. Ca se termine sur cet écran : Et en analysant le fichier de journalisation, on remarque vers la fin des 15000 et quelques lign...
Cliquez pour lire la suite de l'article par Patrick Guimonet [WF4] AJOUTER DES CONTRAINTES à UNE ACTIVITé (2/2)[WF4] AJOUTER DES CONTRAINTES à UNE ACTIVITé (2/2) par JeremyJeanson
Après mon précédent article qui attaque les contraintes par la fasse Nord de l'Everest. passons à la seconde possibilité offerte par WF4 pour valider une activité : la metadata . Je vous en ai déjà toucher un ou deux mots. La metadata dans WF4 est un élém...
Cliquez pour lire la suite de l'article par JeremyJeanson
Logiciels
Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods Konvertor (4.00)KONVERTOR (4.00)Le logiciel est un gestionnaire multimedia affichant, jouant et convertissant plus de 2000 format... Cliquez pour télécharger Konvertor
|