Accueil > Forum > > > > Optimisation de code assembleur inclus dans du code C
Optimisation de code assembleur inclus dans du code C
mercredi 26 mars 2008 à 15:12:07 |
Optimisation de code assembleur inclus dans du code C

fred_82
|
Bonjour,
Alors j'explique le problème, j'aimerais faire une petite fonction en assembleur que j'inclus dans du code C, le probleme est que cette fonction n'est absolument pas optimisé par le compilateur. Exemple : je creer une fonction asm qui fait une addition :
int add(int a,int b){ int c; _asm{ mov eax,a; mov ebx,b; add eax,ebx; mov c,eax; } return(c); }
puis dans ma fonction principale j'utilise les deux manière de faire l'addition ( + et ma fonction add) :
void main(){ int a; int b; int c; int d; scanf("%d",&a); scanf("%d",&b); scanf("%d",&c); scanf("%d",&d); a=a+b+c+d; a=add(add(a,b),add(c,d)); }
Je compile tout ca en release et j'obtient le code asm suivant : pour le + : mov ecx,dword ptr [esp+2Ch] mov edx,dword ptr [esp+30h] add edx,ecx add edx,dword ptr [esp+34h] add esp,20h add dword ptr [esp+8],edx
soit 6 instructions, on voit bien que le code a été optimisé ici
Par contre avec ma fonction add j'obtiens: mov eax,dword ptr [esp+0Ch] mov ebx,dword ptr [esp+10h] add eax,ebx mov dword ptr [esp+18h],eax mov eax,dword ptr [esp+18h] mov dword ptr [esp+20h],eax mov eax,dword ptr [esp+8] mov ebx,dword ptr [esp+14h] add eax,ebx mov dword ptr [esp+1Ch],eax mov ecx,dword ptr [esp+1Ch] mov dword ptr [esp+24h],ecx mov eax,dword ptr [esp+24h] mov ebx,dword ptr [esp+20h] add eax,ebx mov dword ptr [esp+28h],eax
Soit 16 instructions, le compilateur se contente de réécrire le code que j'ai mis dans ma fonction.
Donc ma question est : serait il possible d'écrire une fonction en assembleur et que celle ci soit optimisé par le compilateur? Si oui , comment fait on?
Merci
|
|
mercredi 26 mars 2008 à 15:30:45 |
Re : Optimisation de code assembleur inclus dans du code C

BruNews
|
NON direct et définitif à ta question.
De l'ASM "dans" du C ne fera que empêcher toute optimisation du compilo. Bien entendu que le compilo reporte ce qui est mis en ASM, il ne peut rien faire de plus.
On met une fonction FULL ASM ou FULL C mais jamais de mixage.
ciao... BruNews, MVP VC++
|
|
mercredi 26 mars 2008 à 15:34:28 |
Re : Optimisation de code assembleur inclus dans du code C

BruNews
|
ah oui un exemple de ADD:
__declspec(naked) int __fastcall bnADD(int a, int b) { __asm { lea eax, [ecx+edx] ret 0 } }
Voila une vraie ADD en 2 lignes.
ciao... BruNews, MVP VC++
|
|
mercredi 26 mars 2008 à 16:08:25 |
Re : Optimisation de code assembleur inclus dans du code C

Neo_Fr
|
Comment sais-tu que tel parametre est dans tel registre?
et puis normalement avec __fastcall on doit pas faire un ret 4?
Neo_Fr
|
|
mercredi 26 mars 2008 à 16:57:22 |
Re : Optimisation de code assembleur inclus dans du code C

BruNews
|
Elles ne sont pas cohérentes tes 2 questions. Puisque les params sont en registre, il n'y a rien à dépiler donc 'ret 0'.
C'est le proto d'appel (ici __fastcall) qui dit à l'appelant où mettre les params et qui dépilera si besoin.
ciao... BruNews, MVP VC++
|
|
mercredi 26 mars 2008 à 17:55:53 |
Re : Optimisation de code assembleur inclus dans du code C

Neo_Fr
|
Ok merci, pour ceux qu'ont pas comprit tt est expliquer ici:
http://msdn2.microsoft.com/en-us/library/25687bhx.aspx
Neo_Fr
|
|
mercredi 26 mars 2008 à 18:56:20 |
Re : Optimisation de code assembleur inclus dans du code C

fred_82
|
Merci a tous d'avoir repondu aussi rapidement, en faite je m'explique, j'ai un programme dans lequel j'utilise des instruction SIMD (SSE,SSE2 et autre) le probleme est que certaine intrinsic ne sont pas reconnnu par le compilo de visual , mais aller savoir pourquoi, elles sont reconnu en assembleur. De plus, j'aimerais pouvoir manipuler mes vecteur de la meme façon que je le ferais sous GCC, c'est pourquoi j'aimerais creer ma propre bibliotheque xmmintrin, emmintrin.h et pmmintrin.h. J'ai donc pensé à les codé moi meme en assembleur. Voila
Je vais tout de meme essayer la solution de brunews pour voir ce que ca donne.
Merci
|
|
mercredi 26 mars 2008 à 19:33:09 |
Re : Optimisation de code assembleur inclus dans du code C

BruNews
|
VC++ 2008 reconnait les instructions jusqu'au SSE3. Je ne sais pas ce que tu fais sous GCC mais attention qu'on ne joue pas avec l'ASM, il faut une extrême rigueur et une longue pratique avant de faire mieux qu'un compilo moderne. Au vu de ce qui est plus haut, il va falloir t'entrainer encore longuement et surtout bien comparer les perfs d'une fonction C et ASM. Pour ce qui est de SSE, il y a une option du compilo pour lui faire employer SSE au lieu de la FPU. Ceci dit SSE se code en ASM si on veut l'exploiter pleinement, un compilo C est incapable de faire des instructions packées. Jette un oeil ici: RECHERCHE MINI ET MAXI EN C ET SSE (WIN32) http://www.cppfrance.com/code.aspx?ID=44277COMPARAISON C ET SSE2/3 (WIN32) http://www.cppfrance.com/code.aspx?ID=41536ciao... BruNews, MVP VC++
|
|
jeudi 27 mars 2008 à 14:56:39 |
Re : Optimisation de code assembleur inclus dans du code C

fred_82
|
Le compilo de visual ne permet de cast de __m128 en __m128i (pour visual 2005), certes visual 2008 le permet via une intrinsic mais je possede une version complete de visual 2005 (grace a msdnaa) et cela m'ennui de passer à visual express 2008 surtout que certain utilitaire ne sont pas present.
|
|
jeudi 27 mars 2008 à 15:02:42 |
Re : Optimisation de code assembleur inclus dans du code C

fred_82
|
Les compilo optimise mal en SSE lorsque l'on code en scalaire, par contre lorsque l'on dirige le compilo en codant soit meme en scalaire, le resultat est tout a fait satisfaisant.
|
|
Cette discussion est classée dans : add, mov, ptr, dword, esp
Répondre à ce message
Sujets en rapport avec ce message
optimiser un codes asm [ 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 pou
asm dans WinMain :) [ par Joky ]
Salut les gens ;) Donc voilà je comprend à moitié ce code __asm{ push 0 call dword ptr GetModuleHandle push &nb
Savoir la compilation (Décompilation si possible ^^) [ par Clad38 ]
Bonsoir à tous, Je sais pas si je poste dans la bonne catégorie mais j'ai chercher sans succès. J'ai plusieurs fichiers à décompilé, mais je sais pa
[Aide] Repackeur EPK/EIX [ par slam2 ]
Bonjour, Je requière votre aide étant tout nouveau dans le milieu de la programmation C# & C++ . Afin de mener à bien mon projet, dans le but de pouv
Caster un int dans un char (char * ?) [ par snoop44 ]
Bonjour a tous ! Voila mon petit soucis : Je souhaite "caster" un int pour l'écrire dans un char* avant de faire appel a une fonction qui requiert un
Erreur de segmentation [ par cool2source ]
Bon je dois encore avoir du mal avec les pointeurs ( visiblement)... Je compile le code ci-dessous avec gcc et le seul résultat que j'obtiens est : "E
CreateThread template [ par Pistol_Pete ]
Bonjour à tous, Je cherche à multithreader une fonction template. L'exemple qui suit est un petit exemple de ce que je souhaite faire. J'obtiens l'
System.Windows.Forms.DomainUpDown' ne contient pas une définition pour 'Add' [ par momosan77 ]
Bonjour,j'ai actuellement un souci dans mon code C# pour une pti du BTS. Ainsi je demande votre aide si vous plais. Mon soucis dans le C# est le suiva
Livres en rapport
|
Derniers Blogs
TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System 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 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
|