performance calcul langage C
-
<p>petite question rapide
<br/>
<br/>
elle aurait pu être demandée directement en chat mais bon
<br/>
<br/>
pour mon projet<strong> <span style="color:#ff0000;">en C</span></strong>, je dois faire des calculs pour adapter mon jeu à toutes les dimensions d'écrans, et pour ça je dois remplacer toutes mes valeurs fixes par de "fractions d'écran".</p>
<p><u>pour ça deux solutions, exemple :</u></p>
<p> </p>
<ul><li>screenw*0.75;</li>
</ul><p>ou</p>
<ul><li>(screenw/4)*3;</li>
</ul><p> </p>
<p>les deux fonctionnent parfaitement mais lequel est le plus rapide pour un ordinateur ?</p>
<p> </p>
<p>une multiplication avec virgule ?</p>
<p>ou</p>
<p>une division suivi d'une multiplication ?</p>
<p> </p>
<p>je pense que ça se joue à pas grand chose mais j'ai une centaine d'opérations comme celle-ci au lancement d'un combat ou autre ^_^ </p> -
<p>En réalité, c'est plus complexe que ça.</p>
<p>Il faudrais tout décompiler en ASM pour voir ce que cela engendre réellement dans le code.</p>
<p>pour l'ASM:</p>
<p>méthode 1:</p>
<pre class="ipsCode prettyprint">
push rbp
mov rbp,rsp
mov eax,DWORD PTR [rip+0xce] # 0x4005a4
mov DWORD PTR [rbp-0x4],eax
movss xmm1,DWORD PTR [rbp-0x4]
movss xmm0,DWORD PTR [rip+0xc2] # 0x4005a8
mulss xmm0,xmm1
movss DWORD PTR [rbp-0x4],xmm0
mov eax,0x0
pop rbp
ret
</pre>
<p>méthode 2:</p>
<pre class="ipsCode prettyprint">
push rbp
mov rbp,rsp
mov eax,DWORD PTR [rip+0xde] # 0x4005b4
mov DWORD PTR [rbp-0x4],eax
movss xmm0,DWORD PTR [rbp-0x4]
movss xmm1,DWORD PTR [rip+0xd2] # 0x4005b8
divss xmm0,xmm1
movss xmm1,DWORD PTR [rip+0xca] # 0x4005bc
mulss xmm0,xmm1
movss DWORD PTR [rbp-0x4],xmm0
mov eax,0x0
pop rbp
ret
</pre>
<p>Très clairement, tu fais appel moins de fois à ton processeur (14 appels contre 11), la première méthode est donc la plus rapide.</p>
<p> </p>
<p>Mais attention! Ce n'est valide que car les 2 cas proposent des float. En effet, si nous utilisions des int du début à la fin, la 2nde méthodes aurait été plus viable, pour éviter les casts inutiles.</p>
<p> </p>
<p>PS: je suis partit du principe que tu utilisait des floats pour tes calculs! Il faut savoir que les calculs entre floats sont BEAUCOUP (2.5*) plus lents que les calculs avec des int.</p> -
<blockquote class="ipsQuote" data-cite="AlexMog" data-ipsquote="" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentcommentid="7128" data-ipsquote-contentid="548" data-ipsquote-contenttype="forums" data-ipsquote-timestamp="1399472861" data-ipsquote-username="AlexMog"><div>
<div>
<p>En réalité, c'est plus complexe que ça.</p>
<p>Il faudrais tout décompiler en ASM pour voir ce que cela engendre réellement dans le code.</p>
<p>pour l'ASM:</p>
<p>méthode 1:</p>
<pre class="ipsCode prettyprint">
push rbp
mov rbp,rsp
mov eax,DWORD PTR [rip+0xce] # 0x4005a4
mov DWORD PTR [rbp-0x4],eax
movss xmm1,DWORD PTR [rbp-0x4]
movss xmm0,DWORD PTR [rip+0xc2] # 0x4005a8
mulss xmm0,xmm1
movss DWORD PTR [rbp-0x4],xmm0
mov eax,0x0
pop rbp
ret
</pre>
<p>méthode 2:</p>
<pre class="ipsCode prettyprint">
push rbp
mov rbp,rsp
mov eax,DWORD PTR [rip+0xde] # 0x4005b4
mov DWORD PTR [rbp-0x4],eax
movss xmm0,DWORD PTR [rbp-0x4]
movss xmm1,DWORD PTR [rip+0xd2] # 0x4005b8
divss xmm0,xmm1
movss xmm1,DWORD PTR [rip+0xca] # 0x4005bc
mulss xmm0,xmm1
movss DWORD PTR [rbp-0x4],xmm0
mov eax,0x0
pop rbp
ret
</pre>
<p>Très clairement, tu fais appel moins de fois à ton processeur (14 appels contre 11), la première méthode est donc la plus rapide.</p>
<p> </p>
<p>Mais attention! Ce n'est valide que car les 2 cas proposent des float. En effet, si nous utilisions des int du début à la fin, la 2nde méthodes aurait été plus viable, pour éviter les casts inutiles.</p>
<p> </p>
<p>PS: je suis partit du principe que tu utilisait des floats pour tes calculs! Il faut savoir que les calculs entre floats sont BEAUCOUP (2.5*) plus lents que les calculs avec des int.</p>
</div>
</div></blockquote>
<p> </p>
<p>Mais comment tu connais tout ça ?
</p> -
<p>merci pour ta réponse =)</p>
<p> </p>
<p>du coup j'imagine que :</p>
<pre class="ipsCode prettyprint">
variable0.123456789132456789
</pre>
<p>et aussi rapide que</p>
<pre class="ipsCode prettyprint">
variable0.1
</pre>
<p>ça reste un "float" pour l’ordinateur.</p> -
<blockquote class="ipsQuote" data-cite="cegdd" data-ipsquote="" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentcommentid="7172" data-ipsquote-contentid="548" data-ipsquote-contenttype="forums" data-ipsquote-timestamp="1399501974" data-ipsquote-username="cegdd"><div>
<div>
<p>merci pour ta réponse =)</p>
<p> </p>
<p>du coup j'imagine que :</p>
<pre class="ipsCode prettyprint">
variable0.123456789132456789
</pre>
<p>et aussi rapide que</p>
<pre class="ipsCode prettyprint">
variable0.1
</pre>
<p>ça reste un "float" pour l’ordinateur.</p>
</div>
</div></blockquote>
<p>exact, le registre fais la même taille dans les deux cas (je parle de registre ASM ici)</p> -
<blockquote class="ipsQuote" data-cite="edgekiller" data-ipsquote="" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentcommentid="7161" data-ipsquote-contentid="548" data-ipsquote-contenttype="forums" data-ipsquote-timestamp="1399492026" data-ipsquote-username="edgekiller"><div>
<div>
<p>Mais comment tu connais tout ça ?
</p>
</div>
</div></blockquote>
<p>Années d'experiences, Epitech et tests personnels
(on a recoder Objdump à epitech, donc on sais comment ça marche vue de l'interieur
)</p> -
<blockquote class="ipsQuote" data-cite="AlexMog" data-ipsquote="" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentcommentid="7235" data-ipsquote-contentid="548" data-ipsquote-contenttype="forums" data-ipsquote-timestamp="1399636548" data-ipsquote-username="AlexMog"><div>
<div>
<p>Années d'experiences, Epitech et tests personnels
(on a recoder Objdump à epitech, donc on sais comment ça marche vue de l'interieur
)</p>
</div>
</div></blockquote>
<p> </p>
<p>J'ai vu qu'il y a une école Epitech a Strasbourg (près de chez moi), il faut combien de moyenne général et quel niveau pour rejoindre cette école ?</p> -
<p>Il me semble qu'il ne demande aucun niveau académique spécifique pour y entrer, et tu n'as pas forcément besoin de niveau en informatique pour y rentrer.<br/>
Cependant, tu subiras la piscine dedans, ce qui t'inculquera de force de bonnes notions en informatiques.</p>
<p>
Mais je vais laisser AlexMog t'expliquer plus clairement tout ça, son niveau atteste de son école après tout.
</p> -
<p><a data-ipb="nomediaparse" href="http://www.epitech.eu/la-piscine.aspx" rel="external nofollow">http://www.epitech.eu/la-piscine.aspx</a>
</p> -
<blockquote class="ipsQuote" data-cite="edgekiller" data-ipsquote="" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentcommentid="7260" data-ipsquote-contentid="548" data-ipsquote-contenttype="forums" data-ipsquote-timestamp="1399666195" data-ipsquote-username="edgekiller"><div>
<div>
<p>J'ai vu qu'il y a une école Epitech a Strasbourg (près de chez moi), il faut combien de moyenne général et quel niveau pour rejoindre cette école ?</p>
</div>
</div></blockquote>
<p>Il te faut un bac, de la motivation et beaucoup d'argent (en général tu fais un crédit étudiant pour l'avoir). Par contre tu peux dès à présent demander une journée découverte sur le site de l'école pour pouvoir la visiter avec un étudiant et en savoir un peu plus. (il t'offre le ptit déj et le repas du midi normalement
)</p>
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login