Vitesse des instructions

Galmiza Messages postés 573 Date d'inscription samedi 16 novembre 2002 Statut Membre Dernière intervention 9 avril 2008 - 11 avril 2004 à 22:16
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 - 7 mai 2004 à 21:42
Salut,

1- J'aimerais savoir ou trouver la vitesse d'execution des operations elementaires (add, mov, ...) et plus evoluées (sqrtf, cos, ...) .
Pour un processeur AMD.

2- La plupart des processeurs ont une architecture 32-bits, la taille d'un int. Est-il cependant plus rapide de travailler sur des unsigned short int ou des WORD ? (Au fait, c'est quoi la difference entre WORD, short int et unsigned short int ?)

3- Avez-vous des astuces simples pour accelerer un programme ?
Exemple:
Parmi les 2 methodes differentes suivantes pour appeler un membre d'une classe, il y en a bien une plus rapide que l'autre.

------------------------
class deFrancais
{
public:
int nombre;
}

deFrancais *pc_deFrancais;
int n;

n=pc_deFrancais->nombre;
------------------------
class deFrancais
{
protected: (ou private, je ne sais pas la difference)
int nombre;
public:
int getNombre(void) {return nombre;}
}

deFrancais *pc_deFrancais;
int n;

n=pc_deFrancais->getNombre();

Merci

23 réponses

Galmiza Messages postés 573 Date d'inscription samedi 16 novembre 2002 Statut Membre Dernière intervention 9 avril 2008 1
7 mai 2004 à 21:34
Je viens de lire un code qui remet en doute mes connaissances en C++:

int *reste,*k,*s,*q;

reste=(int*)malloc(sizeof(int));
k=(int*)malloc(sizeof(int));
s=(int*)malloc(sizeof(int));
q=(int*)malloc(sizeof(int));

Mon interpretation:

4 pointeurs sont dans le corps de la fonction.
Les int que pointent ces pointeurs sont alloués a l'appel de la fonction.
Mais où est l'avantage?
Est-il plus rapide de travailler sur des pointeurs que sur ce qu'ils pointent?

Extrait de directX 8.1:

D3DXINLINE D3DXVECTOR3* D3DXVec3Cross
( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV1, CONST D3DXVECTOR3 *pV2 )
{
D3DXVECTOR3 v;

#ifdef D3DX_DEBUG
if(!pOut || !pV1 || !pV2)
return NULL;
#endif

v.x = pV1->y * pV2->z - pV1->z * pV2->y;
v.y = pV1->z * pV2->x - pV1->x * pV2->z;
v.z = pV1->x * pV2->y - pV1->y * pV2->x;

*pOut = v;
return pOut;
}

La fonction est censée etre optimisée a fond.
Elle a beau etre en C++ mais ceux qui l'ont faite savent comment marche le compilo !

Donc la, la fonction ne recupere que l'adresse ou se trouve les vecteurs, et travaille dessus via leurs pointeurs.
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
7 mai 2004 à 21:36
ben si tu ve faire ca en c++ evite les void * et prefere les templates

sinon le void * se cast implicitement vers le type souhaité mais pour les objets ca doit etre plus subtile, je vais me renseigner

mais franchement utilise les templates en c++ pour la programmation generique, les void* c'est depassé et dangereux
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
7 mai 2004 à 21:42
reste=(int*)malloc(sizeof(int));
k=(int*)malloc(sizeof(int));
s=(int*)malloc(sizeof(int));
q=(int*)malloc(sizeof(int));

deja comme je l'ait dit le void* se cast implicitement donc la les cast en int* sont inutiles

pour la focntion je voit pas l'utilité de crée un oobjet temporaire, ca surcharge la pile pour rien (push/pop/constructeur,...)

D3DXINLINE D3DXVECTOR3* D3DXVec3Cross
( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV1, CONST D3DXVECTOR3 *pV2 )
{
pOut->x = pV1->y * pV2->z - pV1->z * pV2->y;
pOut->y = pV1->z * pV2->x - pV1->x * pV2->z;
pOut->z = pV1->x * pV2->y - pV1->y * pV2->x;

return pOut;
}

n'est ce pas la meme chose?
0
Rejoignez-nous