Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Cortex ARM => Konuyu başlatan: z - 27 Ekim 2019, 07:43:34

Başlık: Keil - CM0 optimize kod uretiminde karsilastigim mantik
Gönderen: z - 27 Ekim 2019, 07:43:34
int a;
int main(void)
{
int i;
    for (i=0;i<10;i++)
      {
       a=a+1;
       if (a>5) a=a+2;
      } 
}

CM0 islemci icin yukaridaki kodu yazip hiz acisindan 3 seviyesinde optimizasyonla derledim ve asm ciktisina baktigimda sanki kodu asagidaki gibi yazmisim da derlemisim gibi kod uretildigini gordum.

int a;
int main(void)
{
int i;
    for (i=0;i<5;i++)
      {
       a=a+1;
       if (a>5) a=a+2;
       a=a+1;
       if (a>5) a=a+2;
      } 
}

Derleyici hiz kazanmak icin nasil bir sorun gordu de kodu boyle derledi?

Ilk akla gelen jmp komutlarindan dolayi pipeline bosaltma durumu.

Fakat for dongusu icin ve  if a>5 icin zaten jmp kullaniyor. Dolayisi ile dongu sayisini yari yariya dusururken if sayisindan dolayi loop icindeki jmp sayisini 2 ye katliyor.

Bir anlam veremedim.

Başlık: Ynt: Keil - CM0 optimize kod uretiminde karsilastigim mantik
Gönderen: OptimusPrime - 27 Ekim 2019, 08:22:09
O da senin ne yaptigina anlam vermemistir. :D

Gorunuse gore donguyu hizlandirmis. i yi 10 kere artirmiyorda 5 kere artirarak cozume gidiyor. ::ok
Başlık: Ynt: Keil - CM0 optimize kod uretiminde karsilastigim mantik
Gönderen: WrtM - 27 Ekim 2019, 09:27:01
Loop unrolling mantığı gibi geldi.birde optimizasyon ayarlarını değiştirip çıktıları incelemek
gerek
http://bertantaskin.com/loop-unrolling/