[elektro] ARM gcc if-else

Pipi lista at puzsar.hu
Tue Aug 16 09:57:52 CEST 2016


Hali!
Ha már sebességkritikus...
szerintem a lenti példában tök felesleges a shiftelés, gyorsabb ha az  
& kifejezés "jól" van kitalálva :)

Idézet (Péter Bozzay <peterb.list at gmail.com>):

> Sziasztok,
>
> Kísérleteztem egy függvény optimalizálásával, amiben hívásonként
> sokszor futnak le ilyen blokkok:
>
> if ((data << i) & 0b10000000)
> {
>    if (v1) PIN1_SET;
>    else PIN1_RESET;
>    if (v2) PIN2_SET;
>    else PIN2_RESET;
>    if (v3) PIN3_SET;
>    else PIN3_RESET;
> }
>
> A makrók sima ÉS/VAGY regiszter módosítások, semmi extra.
> Függvényhívás előtt-után kapcsolt leddel mértem a futásidőt így, majd
> úgy is, hogy az else sorokat kivettem:
>
> -O0: 1355 / 1340 us
> -O1: 675 / 680 us
> -O2: 630 / 675 us
> -O3: 630 / 680 us
> -Os: 750 / 775 us
>
> Azaz -O2-től már számottevően nagyobb a futásidő, ha NINCS benne az
> else. Ez elég fura, különösen, hogy else nélkül egy "if (vx)
> PINx_SET;" sor csak 4 gépi utasítás, else-szel meg 5. Nem akarok most
> ettől jobban belemélyedni, asm-et nézegetni, mert úgyis alapjaiban át
> kell írnom az egészet, inkább csak érdekességképpen írtam le, hátha
> más is belefut hasonlóba. Ha eleve másképp, else nélkül kezdtem volna
> neki, akkor talán ki se derül, hogy akár 8%-kal gyorsabban is
> futhatna, ami itt nem elhanyagolható.
>
> Üdv,
> Péter
>
> -----------------------------------------
>           elektro[-flame|-etc]




More information about the Elektro mailing list