Главная страница


ru.linux

 
 - RU.LINUX ---------------------------------------------------------------------
 From : Andrey Melnikoff                     2:5020/400     12 Nov 2004  00:15:17
 To : Alex Korchmar
 Subject : Re: <none>
 -------------------------------------------------------------------------------- 
 
 Alex Korchmar <hue-moe@so.yandex.ru> wrote:
 
 > Andrey Melnikoff <temnota+news@kmv.ru> wrote:
 
 > AM> Hет, что-то всетаки улучшается. Hапример с -fomit-frame-pointer
 > AM> gcc перестал даже играть вокруг %esp с %ebp в тех местах, где они
 > думаешь, это можно заметить?
 
 Можно. Если очередной coder написаль процедурку типа 
 long xxx_param(long p1, long p2){
     if (p1 > blah-blah && p2 < blah-blah)
   return p1+p2<<8;
 }
 и вызовов в коде - под хреннадцать тысячь. 
 
 > >> а серьезный прорыв в gcc'шной оптимизации был ровно один и как раз его
 > >> результаты я и тестировал.
 > AM> Какой из ?
 > на самом деле их два было - pgcc и то, имени ibm, но в одно и то же время.
 > Остальное по сравнению с этим - мелочь, imho.
 
 Аааа..
 
 > AM> Я вот -mregparam=3 попробовал попользовать на практике.. Получилась
 > AM> довольно смешная каша.
 > в смысле, пользоваться нельзя?
 
 кусок кода без -mregparm=3: 
         movl    12(%ebp), %edi
         incl    %edi
         movl    %edi, (%esp)
         call    malloc
         movl    %eax, %esi
         xorl    %eax, %eax
         testl   %esi, %esi
         je      .L124
 
 тот-же кусок кода с -mregparm=3:
         movl    -184(%ebp), %edi
         incl    %edi
         movl    %edi, %eax
         call    malloc
         movl    %eax, %esi
         xorl    %eax, %eax
         testl   %esi, %esi
         je      .L124
 
 как ты думаешь, системный malloc() обучен принимать количествой байтов в
 %eax? ;)
 
 PS: А оптимизатуор вообще песня. Вопервых - непонятна сама причина возьни с
 %edi, когда есть универсальный %eax. Обрати внимание на возьню с %esi. Код
 логически ужимается до такого:
 
         movl    -184(%ebp), %eax
         incl    %eax
   pushl   %eax
         call    malloc
   addl $2, %esp
         orl     %eax, %eax
         je      .L124
 
 Использовалось: 
 gcc version 3.4.2 (Debian 3.4.2-3) && gcc version 3.3.5 (Debian 1:3.3.5-2)
 в случае с 3.4.2 и без -mregparm=3 результат получается иногда лучше, за
 счет того, что оптимизатор придерживает "пробивание дыры в стеке" для
 локальных переменных.
 
 PPS: Cишный код:
 
 char *rd(int max_size){
     char *buf = NULL;
 
     if ((buf = malloc((max_size + 1) * sizeof(char))) == NULL) {
         return NULL;
     }
   .....
 }
 и параметры: 
 -O3 -fno-omit-frame-pointer -Wall -funsigned-bitfields -Wunused -mregparm=3 
 --- ifmail v.2.15dev5.3
  * Origin: Demos online service (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Re: <none>   Alex Korchmar   11 Nov 2004 01:44:37 
 Re: <none>   Andrey Melnikoff   11 Nov 2004 18:30:15 
 Re: <none>   Alex Korchmar   11 Nov 2004 22:57:28 
 Re: <none>   Andrey Melnikoff   12 Nov 2004 00:15:17 
 Re: <none>   Alex Korchmar   12 Nov 2004 03:08:14 
 Re: <none>   Andrey Melnikoff   12 Nov 2004 12:00:36 
 Re: <none>   Alex Korchmar   12 Nov 2004 20:15:34 
 Re: <none>   Andrey Melnikoff   12 Nov 2004 21:15:18 
Архивное /ru.linux/6438c224a66d.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional