Ha elvégzek egy C-ben írt számítást, például mátrix-mátrix összeadást vagy mátrix-mátrix szorzást, ahol a munka egy for
ciklusban történik, minden iteráción azonos számú és típusú aritmetikai művelettel, akkor a konkrét értékei a bemeneti adatok befolyásolják a számítás sebességét? Például, ha a mátrixelemek 32 bites egész számok, amelyek értéke 0 és 127 között van, és a reprezentációjuk csak négy megfelelő bájtból egyben változik, akkor az gyorsabban futna, mintha az értékek 0 és INT_MAX
között változnának (feltételezve, hogy nem meghatározatlan viselkedés fordul elő)?
Ha tippelnem kellene, azt mondanám, hogy nem, mert akár kicsi, akár nagyon nagy az érték, mivel 32 bites egész számként van definiálva, akkor maszkolásra kerül, hogy ugyanannyi memóriaterületen elférjen, így a kicsi és a nagy az értékeknek végül ugyanannyi bájt lesz a memóriájában. Jól gondolom ezt? Más az egyszeres/kettős pontosságú lebegőpontos számoknál?
__attribute__((packed))
-t vagy hasonló pragmát kell használnia ennek felülbírálásához egy struktúrán belül. Az adatok struktúrákba való elrendezése a kitöltés elkerülése érdekében különbséget tehet a között, hogy a teljes struktúra egy gyorsítótár-sorba illeszkedik-e vagy sem, ami nagyobb léptékű gyorsítótár találati arányt eredményezhet több struktúrán keresztül. 15.12.2016