🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fr.comp.lang.c
Article #15575

Re: Routine de trie pour une liste de structure.

#15575
From: Richard Delorme
Date: Fri, 16 Sep 2005 11:54
105 lines
5015 bytes
Charlie Gordon a �crit :


>> [...] j'ai du mal � 
>> comprendre comment un do/while peut-�tre moins efficace qu'un while
>> ou un for, alors qu'il fait une comparaison en moins...
> 
> Elle fait une comparaison en moins, mais le corps de la boucle est
> execut� une fois de plus avec le do/while dans le cas ou l'�l�ment �
> ins�rer est d�j� � sa place en fin de liste.

Dans le morceau de code que j'ai fourni, le corps de la boucle est
toujours effectu� une fois, m�me si je place le while en t�te. C'est
pour �a que je l'ai mis � la fin. On est dans un cas similaire � �a :

int i, j, n;
n = 42;
for (i = 2; i < n; ++i) {
    for (j = 1; j < i; ++j) {
        /* corps */
    }
}

Comme la valeur de i va de 2 � n, quand j vaut 1, il est n�cessairement
inf�rieur � i, et la premi�re comparaison est inutile. Le do/while
suivant constitue donc une optimisation possible :

for (i = 2; i < n; ++i) {
    j = 1;
    do {
        /* corps */
        ++j;
    } while (j < i);
}

Aujourd'hui, il est possible que les compilateurs savent traduire un for 
en do/while quand il le faut, mais sans doute pas � l'�poque o� j'ai 
�crit ce code.


>>> Mais encore faudrait-il que la routine de tri repr�sente une part
>>> significative du temps de calcul, as-tu fait un peu de profiling ?

>> Actuellement, la part de cette fonction est d'environ 1.5% d'apr�s 
>> gprof, mais :
> 
> cela semble indiquer que tu concentres tes efforts sur le mauvais
> cheval.

Je ne me concentre plus tellement l� dessus. Et le 1.5%, c'est apr�s 
avoir �carter les solutions plus lentes...


>> 1) gprof marche mal. Entre deux impl�mentations, l'une rendant le 
>> programme globalement 1% plus rapide que l'autre, gprof trouve la
>> m�me part d'utilisation de 1,5%.
> 
> C'est vrai, mais la difference de perf pourrait aussi s'expliquer par
> les effets de bord que la modif de cette routine peut avoir sur le
> reste du code : par exemple changements d'alignement dans d'autres
> fonctions deont le code pourtant identique a ete d�cal� � cause des
> modifs...

Le code profil� n'�tant pas le m�me que le code normalement ex�cut�, les 
effets de bord sont omnipr�sents. Beaucoup trouvent que gprof marche 
mal, et utilise des alternatives home-made, p.ex :
http://www.squid-cache.org/mail-archive/squid-dev/200009/0101.html


>> 2) j'en suis aux micro-optimisations depuis un moment. Pourcent par
>>  pourcent, j'ai gagn� un facteur 5 en vitesse depuis 5 ans.
> 
> A conditions constantes je suppose?

Bien s�r.


> parce que c'est le rapport moyen
> de performances obtenu en suivant betement l'evolution du hard �
> logiciel constant. Donc en changeant de machine (pour un prix modique
> d'ailleurs) tu devrais avoir un facteur 25.

En gros oui.


>> 3) le taux d'utilisation de cette fonction pourrait �tre sup�rieur
>> si elle �tait plus efficace.
> 
> Ca depend de ce que tu entends par l� : - tu ferais plus usage de
> cette fonction, dans d'autres parties de l'algorithme, ou plus
> souvent au cours de l'analyse des coups.

Oui.


> Alors oui, l'optimisation 
> paierait, mais vu qu'elle ne represente que 1.5% aujourd'hui, tu
> pourrais deja mettre cette demarche en pratique.

C'est difficile. Dans le tri complet, il y a aussi le calcul des valeurs 
� trier, qui est assez long. Le taux d'utilisation est � peu pr�s 
optimal aujourd'hui.

-- 
Richard
Technical Details
Message-ID: <432ab256$0$305$7a628cd7@news.club-internet.fr>
Path: arc1-ca.pugleaf.net!g2news1.google.com!news2.google.com!proxad.net!proxad.net!m.t-online.fr!v.t-online.fr!t-online.fr!not-for-mail
References: <4322f71b$0$17773$ba620e4c@news.skynet.be> <432306a8$0$1023$8fcfb975@news.wanadoo.fr> <43230d96$0$6578$ba620e4c@news.skynet.be> <432447e6$0$1740$8fcfb975@news.wanadoo.fr> <43246b95$0$305$7a628cd7@news.club-internet.fr> <432472f2$0$17219$8fcfb975@news.wanadoo.fr> <4324794b$0$303$7a628cd7@news.club-internet.fr> <dg28sd$a9j$1@reader1.imaginet.fr> <43255e40$0$304$7a628cd7@news.club-internet.fr> <dg8un3$hor$1@reader1.imaginet.fr> <432840e4$0$303$7a628cd7@news.club-internet.fr> <dge3l8$fmr$1@reader1.imaginet.fr>

Show Full Headers
Complete Article Headers
X-Google-Thread: f9822,5d389ec4d86f895c
X-Google-Attributes: gidf9822,public
X-Google-Language: FRENCH,ASCII
Path: arc1-ca.pugleaf.net!g2news1.google.com!news2.google.com!proxad.net!proxad.net!m.t-online.fr!v.t-online.fr!t-online.fr!not-for-mail
Date: Fri, 16 Sep 2005 13:54:01 +0200
From: Richard Delorme <abulmo@nospam.fr>
User-Agent: Mozilla Thunderbird 1.0.6 (X11/20050801)
X-Accept-Language: fr, en
MIME-Version: 1.0
Newsgroups: fr.comp.lang.c
Subject: Re: Routine de trie pour une liste de structure.
References: <4322f71b$0$17773$ba620e4c@news.skynet.be> <432306a8$0$1023$8fcfb975@news.wanadoo.fr> <43230d96$0$6578$ba620e4c@news.skynet.be> <432447e6$0$1740$8fcfb975@news.wanadoo.fr> <43246b95$0$305$7a628cd7@news.club-internet.fr> <432472f2$0$17219$8fcfb975@news.wanadoo.fr> <4324794b$0$303$7a628cd7@news.club-internet.fr> <dg28sd$a9j$1@reader1.imaginet.fr> <43255e40$0$304$7a628cd7@news.club-internet.fr> <dg8un3$hor$1@reader1.imaginet.fr> <432840e4$0$303$7a628cd7@news.club-internet.fr> <dge3l8$fmr$1@reader1.imaginet.fr>
In-Reply-To: <dge3l8$fmr$1@reader1.imaginet.fr>
Content-Type: text/plain; charset=ISO-8859-15; format=flowed
Content-Transfer-Encoding: 8bit
Lines: 105
Message-ID: <432ab256$0$305$7a628cd7@news.club-internet.fr>
Organization: Club-Internet / T-Online France
NNTP-Posting-Date: 16 Sep 2005 11:53:59 GMT
NNTP-Posting-Host: 62.34.56.67
X-Trace: 1126871639 news.club-internet.fr 305 62.34.56.67
X-Complaints-To: abuse@club-internet.fr