Asi vím, jaks to myslel, ale to co jsi napsal není pravda. Paměť není "RAM" (v původním významu toho slova) asi tak 25 let, stejně jako SSD není žádný disk :-) Podívej, jak je organizovaná L1 a L2 cache, jak dlouhé jsou cache line a zejména kolik jich je. To je omezující faktor, který se každou další dereferencí zhoršuje a zhoršuje, což je snadno měřitelné. Ano, nikdo nezaručí, že přečteš 100 MB pole tak, že budeš mít vše dopředu v cache, ale co bude u pole struktur/primitivních hodnot zaručeno je, že jak se určitý prvek dostane do cache line, budou tam i ty následující prvky. U pole referencí máš jen jistotu, že čtení dalších N referencí (ne hodnot!) bude možná v cache, možná ale taky ne, protože se to přeplácne načítanými strukturami.
Problém vašeho tvrzení je v tom, že ani CPU nevypadá stejně, jako před 25 lety, a neběží na něm jediná úloha, jako před 25 lety.
To měření tady někdo provedl, a zjistil zhoršení o 100 % a o 50 %. Což je něco, čím se normálně není potřeba zabývat.
Navíc většina těch příkladů, které se tady uvádí, se na moderních CPU dá mnohem více optimalizovat tím, že se budou provádět paralelně.
Souhlas s tim, ze pro vetsinu aplikaci je lepsi, rychlejsi a jaksi prijemnejsi zmena algoritmu nez resit tyto optimalizace (prvni a zasadni optimalizaci je vyber jazyka vhodneho pro danou ulohu a vime, ze to neni snadne z mnoha technologickych i politickych duvodu).
Ad CPU: to je skutecne pravda, ovsem to v tomto kontextu neni az tak relevantni. Dulezitejsi je organizace cache (tu zname) a take to, co se stane v tom horsim pripade, kdy se musi sahat do operacni pameti (RAM). Kdysi - a lidi asi maji nekdy pocit, ze to stale plati - byl cip s SRAM docela jednoduchy, proste se poslala adresa, nastavil se R/W bit a po par taktech se cetlo/zapisovalo. Ostatne CPU byly rychlosti srovnatelny s SRAM, takze dokonce bylo mozne, ze dokud CPU pocital, pristupovala k SRAM jina periferie.
Ale uz DRAM mely rozdeleni CAS/RAS, takze cteni 'radku' je mnohem rychlejsi nez neustale vystavovani jak RAS tak CAS. S SDRAM a burst rezimem je to jeste o obrovsky krok dale a nahodne cteni je strasne drahe (doporucuji se podivat na ten prenosovy protokol) kdezto cteni/zapis cele cache line (64 bajtu atd.) je mnohem rychlejsi. Tudiz nezavisle na CPU proste plati, ze kontinualni pristup do pameti je rychlejsi, klidne i radove.
A ze v CPU bezi vic vlaken? Skutecne ano, ale pokud dochazi k invalidaci vsech cache line po prepnuti vlakna, znamena to s velkou pravdepodobnosti, ze to dalsi vlakno pouzivalo nahodny pristup a za tu chvili behu rozdrbalo zbytek 'systemu' (tedy je to komplikovanejsi diky lokalite L1 a vetsinou globalite L2).
Opakuji - v naproste vetsine pripadu to clovek nemusi az tak moc brat v uvahu, ale reakce na nazor "RAM je random access" musela zaznit, protoze to neni a uz asi nikdy nebude pravda.