Zarovnani v LPC11U68
Miroslav Mraz
mrazik na volny.cz
Pondělí Červenec 11 16:26:59 CEST 2016
To máte pravdu, ale nijak to neodporuje mému tvrzení. Pokud požadavek na
zarovnání pro překladač vznesete, ten jej může akceptovat a
optimalizovat podle něj, nebo jej ignoruje a optimalizaci neprovede.
Pokud takový požadavek nedáte, překladač nemůže činit žádný předpoklad o
zarovnání a optimalizovat tedy nemůže.
Narazil jsem na to při implementaci FFT v celých číslech pro cortex-m0,
pro určitou verzi gcc se neprovedlo zarovnání dat a celé to dlouho
trvalo, protože se kopírovaly jednotlivé byty. Teď jsem to pro jistotu
znovu zkoušel a v současné verzi gcc 4.9.3 je toto chování opraveno,
zarovnání se provede automaticky i bez explicitního
__attribute__((aligned(4))). Je vidět, že lidi mrmlají a ku podivu gcc
na to reaguje. Takže máte úplnou pravdu - je ještě 3. možnost -
požadavek nevznesete a překladač si to udělá po svém (a správně), včetně
optimalizace. Asi to chce používat co nejnovější software. I když i to
bývá riziko, je to zkrátka už moc složité.
Mrazík
Dne 11.7.2016 v 12:42 Tomáš Hamouz napsal(a):
> Až dosud jsem byl přesvědčen že __attribute((aligned(n)))) je
> _požadavek_ na compiler/linker, aby danou proměnnou umístil dle
> požadavku, nikoliv informace jak je proměnná zarovnaná.
>
> Tedy říkáte jak "má být", nikoliv jak "je".
>
> Tomáš
>
>
>>
Další informace o konferenci Hw-list