| 
	
 | 
 
Страници по тази тема: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | (покажи всички)
           
             
               
               
                 
                   | 
                   Тема
                    | 
                     Скорост на ассемблер срещу Ц 
 | 
 
 |  
| Автор | 
grg (минаващ) |  
| Публикувано | 10.12.11 22:38 |  
             |  
           | 
            
           
  Моето мнение е че асемблера е значително по бырз
 
 Компилирах с "gcc -o3 -S" следния C код: 
 
 double f(double m[3][3])
 {
 int i,j;
 double r=0.0,a;
 for(i=0; i<3; i++)
  {
    a=1.0;
    for(j=0; j<3; j++)
      a=a*m[j]*m[j];
    r=r+a;
  }
 return r;
 }
 
 Кодът, който GCC генерира, на максимална оптимизация, е такъв, че лесно мога да го напиша на ассемблер да е 5-6 пъти по бърз. И да отбележа, въпреки че вътрешния цикъл има само 3 итерации, не го е "унролнал". Прави адресни изчисления със четене на  i, j и адреса на м от памет (без да ги държи в регистри). А някои усилено спорят, че е свръх сложно за човек да бие C компилaтор по производителност.
 
 Редактирано от grg на 11.12.11 01:39. 
           
  
             |   |  
           
             
               
               
                 
                   | 
                   Тема
                    | 
                     Re: Скорост на ассемблер срещу Ц - грыматика 
[re: grg]
 | 
 
 |  
| Автор | 
Naki (Company PC Guy) |  
| Публикувано | 10.12.11 22:53 |  
             |  
           | 
            
           
  Интересно, отде извади тази буква?  На моята клавиатурна подредба (фонетик) я няма. "Бырз" не е, такава буква в българския няма - пише се със Ъ.
 Иначе може би си прав - Dev C++ какво дава? Microsoft C++?
 Майка ми е асемблер програмист, пише за Пик-ове.
 
 
 Редактирано от Naki на 10.12.11 22:54. 
           
  
             |   |  
           
             
               
               
                 
                   | 
                   Тема
                    | 
                     аз на асемблер бих го написал така: NOP 
[re: grg]
 | 
 
 |  
| Автор | 
~@!$^%*amp;()_+ (целия горен ред) |  
| Публикувано | 10.12.11 23:08 |  
             |  
           | 
            
           
  e може би трябва да върна 0 за r 
 
 --------------------------------
 for(i=0; i++; i<=3) 
 
 това чудо изскача още преди първата итерация 
 Редактирано от ~@!$^%*amp;()_+ на 10.12.11 23:51. 
           
  
             |   |  
           
             
               
               
                 
                   | 
                   Тема
                    | 
                     Re: Скорост на ассемблер срещу Ц 
[re: grg]
 | 
 
 |  
| Автор | 
BlGBUGEX (нерегистриран) |  
| Публикувано | 10.12.11 23:31 |  
             |  
           | 
            
           
  Не можеш! Първо мериш, после се изрязваш. Тва е правилото на успешния трол.
  
           
  
             |   |  
           
             
               
               
                 
                   | 
                   Тема
                    | 
                     Re: Скорост на ассемблер срещу Ц 
[re: grg]
 | 
 
 |  
| Автор | 
grg (минаващ) |  
| Публикувано | 11.12.11 00:26 |  
             |  
           | 
            
           
  Вярно имам грешка. Ще я изправя и ще видя пак.
 
 Ето новия код:
 
 double f(double m[3][3])
 {
 int i,j;
 double r=0.0,a;
 for(i=0; i<3; i++)
  {
    a=1.0;
    for(j=0; j<3; j++)
      a=a*m[j]*m[j];
    r=r+a;
  }
 return r;
 }
 
 Коментара за скоростта пак е в сила за коректния код.
 Други компилатори няма да инсталирам само за да пробвам това.Редактирано от grg на 11.12.11 00:31. 
           
  
             |   |  
           
             
               
               
                 
                   | 
                   Тема
                    | 
                     Re: Скорост на ассемблер срещу Ц 
[re: grg]
 | 
 
 |  
| Автор | 
Naki (Company PC Guy) |  
| Публикувано | 11.12.11 01:01 |  
             |  
           | 
            
           
  Редактирай си началния постинг, Дира ти дава право до 6 часа...
 
  
           
  
             |   |  
           
             
               
               
                 
                   | 
                   Тема
                    | 
                     Re: Скорост на ассемблер срещу Ц 
[re: grg]
 | 
 
 |  
| Автор | 
BlGBUGEX (нерегистриран) |  
| Публикувано | 11.12.11 02:18 |  
             |  
           | 
            
           
  Истинските програмисти дето владеят силата (асемблера) могат да пишат перфектно на С. При тебе всичко приключи с първия ти пост. Като падащ руснак за който руското посолство твърди че е извънземен космически кораб. Обаче всички виждат че е падащ руснак. Тука идва момента, руснака да изкара огън или нещо по-впечатляващо ( в твоя случай код ) от задника си за да посее съмнения в публиката.
  
           
  
             |   |  
           
             
               
               
                 
                   | 
                   Тема
                    | 
                     Re: Скорост на ассемблер срещу Ц 
[re: grg]
 | 
 
 |  
| Автор | 
muletar (член) |  
| Публикувано | 11.12.11 03:35 |  
             |  
           | 
            
           
  По-бърз е. Направи един UI на асемблер да видиш каква е бързина.
  
           
  
             |   |  
           
             
               
               
                 
                   | 
                   Тема
                    | 
                     Re: Скорост на ассемблер срещу Ц 
[re: grg]
 | 
 
 |  
| Автор | 
| (>[2] /dev/null) |  
| Публикувано | 11.12.11 05:42 |  
             |  
           | 
            
           
  Нещо си оплескал. Gcc напълно unroll-ва и двата цикъла.
 
 
 
 f:
 .LFB0:
         .cfi_startproc
         movsd   (%rdi), %xmm1
         movsd   8(%rdi), %xmm0
         mulsd   %xmm1, %xmm1
         movsd   32(%rdi), %xmm2
         mulsd   %xmm0, %xmm1
         mulsd   %xmm0, %xmm1
         movsd   16(%rdi), %xmm0
         mulsd   %xmm0, %xmm1
         mulsd   %xmm0, %xmm1
         movsd   24(%rdi), %xmm0
         mulsd   %xmm0, %xmm0
         addsd   .LC0(%rip), %xmm1
         mulsd   %xmm2, %xmm0
         mulsd   %xmm2, %xmm0
         movsd   40(%rdi), %xmm2
         mulsd   %xmm2, %xmm0
         mulsd   %xmm2, %xmm0
         movsd   56(%rdi), %xmm2
         addsd   %xmm0, %xmm1
         movsd   48(%rdi), %xmm0
         mulsd   %xmm0, %xmm0
         mulsd   %xmm2, %xmm0
         mulsd   %xmm2, %xmm0
         movsd   64(%rdi), %xmm2
         mulsd   %xmm2, %xmm0
         mulsd   %xmm2, %xmm0
         addsd   %xmm1, %xmm0
         ret
         .cfi_endproc
  
  The last good thing written in C was Franz Schubert's Symphony No. 9.
           
  
             |   |  
           
             | 
               
                |  
           | 
            
           
  
 
 изглежда добре
 --------------------------------------------------------------------------------
 program t; 
 #include("switch.hhf") 
 begin t;
    switch( eax );
        case( 1 )
            switch( ebx );
                case( 100 )
                    mov( 100, ebx );
                case( 101 )
                    mov( 101, ebx );
                default
                    mov( 0, ebx );
            endswitch;
        case( 2 )
            mov( 2, eax );
        case( 3 )
            mov( 3, eax );
        default
            mov( 0, eax );
    endswitch;
 end t;
  
           
  
             |   |  
  |   
 
 
Страници по тази тема: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | (покажи всички)
 |  
 |   
 |