> Hogy hozzak egy analógiát, talán tisztább lesz: SQL SELECT-ben se írod le az algoritmust, csak azt, hogy az adatokra, amik visszajönnek, milyen feltételeknek kell teljesülniük. Azt, hogy ezt pontosan hogyan éri el a DB szerver, az rá van bízva (persze sokszor érdemes neki segíteni, hogy hogyan csinálja). Ha ugyanezt C++-ban írod meg, akkor odaírsz valami konkrét algoritmust. SQL-ben nem.
Értem mit akarsz mondani, de az analógia kicsit sántít, mert nem egy szint a kettő. SQL-ben semmi egyebet nem lehet csinálni, mint adatot lekérni, vagy beírni az adatbázison belül, a direkt erre a célra kialakított rétegeken keresztül, míg a Haskell univerzális, elméletileg bármit le kéne tudnia algoritmizálni a direktíváid alapján, beleértve pl. a perifériákhoz való hozzáférést, vagy akármit.
> Használható alatt azt értem, hogy nem kell vele különösebben sokat foglalkozni. Mikor mondjuk egy sok százezer sorból álló kódod van, aminek kb. az 5%-a hot, akkor nem fogsz nekiállni egyesével csekkolni, vajon melyik részt milyen kapcsolókkal kell fordítani...
Hát ebben mondjuk igazad van, ennyi erővel akár kézzel is optimalizálhatod ASM-ben.
> CPU alatt konkrét típust értek. GCC-nek, Clang-nak van ilyen opciója: -mtune=XXX. Ide elég konkrét típust kell írni (ami egyébként nyilván a másik sok paraméter értékeit állítgatja). De ez az opció messze nem tökéletes. Sokszor van, hogy egy másik típust kiválasztva gyorsul a kód. Olyan is van, hogy valami ősrégi CPU-t mondok meg neki, és gyorsul 20%-t.
És a -march=XXX-szel? Az mtune esetében a végeredménynek a többi CPU-n is futnia kell, tehát extrém dolgokat nem nagyon csinálhat, nem használhat specifikus utasításokat, tartania kell a közös ABI-t, míg a march ezt eltörheti; azaz a march jobb eredményt hozhat.
> Nu, nem egészen értem, itt mire gondolsz. Nem különösebben számít, hogy 2 kódrész milyen távol van egymástól. Amire a kódok távolsága kihatással van, az a cache. De ez sem okoz jelentős különbséget. A pipeline kiürülésének (vagy nemtom mit értesz azon, hogy a csőbe be kell húzni) semmi köze sincs a kódok távolságához.
Akkor ezt rosszul tudtam.