( TCH | 2018. 11. 30., p – 14:06 )

> 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.