C++ ban hogy kell az alábbi programot megoldani? írja ki a 55 töbszöröseit 1000 ig;
Nem viccelek, egész egyszerűen olyan kódot generál a fordító ami az adott optimalizációnak a legjobban megfelel. Ha a méretet kell minimalizálni akkor ciklusnak megfelelő assembly kód lesz, amennyibben sebességre akkor egy kiírást egymás után 18-szor végrehajtani gyorsabb, mint ciklusos megoldással.
Neve is van: [link]
A vektorizáció teljesen más téma és az említett példakódon soha semelyik fordító sem fogja alkalmazni azt, nem véletlenül. A következő ciklus mindig függ az előzőtől. Nem úgy működik ahogy azt te leírtad. Nem mellesleg általában legfeljebb 4 utasítást tud párhuzamosítani az SSE és társaik. Fogj egy gcc-t, alkalmazd rajta a -O2 és a -ftree-vectorize kapcsolókat és nézd meg milyen kódot generál. Ha felismeri és képes is alkalmazni rajta vektorizációt akkor is ciklusban azt, 4-essével.
A 18x-os gyorsítás pedig egy kitaláció. Az előnye a ciklusnak pontosan az hogy a branch prediction életbe tud lépni és "előre" tud gondolkozni a CPU (akár párhuzamosan is).
Természetesen ilyen egyszerű kódnál alig ha lesz különbség a különböző fordítási módok között, de én azt ajánlom próbáld ki amit mondasz, nézd meg hogy tényleg úgy optimalizál a fordító ahogy azt te hiszed, és próbáld ki hogy tényleg 18x gyorsabban lefut e.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!