Kazdy vidi bottleneck jinde, a pro typickou desktop platformu je to u me v malem poctu PCIe linek (nemuzete mit GPU na x16 a dalsi kartu jako 10G ci RAID - protoze to zacne rozkladat linky a zustane 8+8). Tohle resi serverove/workstation cpu, ale to uz je cenove dost jinde.
Druhy bottleneck je podobny - pripojeni PCH je skrze DMI, coz je taky jen pcie - a ma sirku x4 linek. Stejna situace panuje u AMD, kde je to take x4 (at uz desktop, nebo TR), takze jestli na ten SB povesite vicero SATA SSD nebo usb3, je ta roura jiz uzka.
Brutální bottleneck je v dnešní době paměť. Rychlost přístupu do paměti roste výrazně pomaleji, než rychlost procesorů.
Hlavně náhodný přístup je problém. Setkal jsem se už i s pohledem, že přístup do paměti není O(1), ale O(sqrt(N)), kde N je celkové množství paměti využité procesem. Nevím, jestli je to korektní, ale je to výstižné. Čím víc paměti, tím menší šance že je nějaká náhodná adresa v cache nebo dokonce není odswapovaná.
Problém je, že naivní objektový návrh a jazyky, co každý objektík alokují zvlášť na haldě silně vedou k velice špatnému využití paměti. Ale při profilování se žádné úzké hrdlo neobjeví.
Proto se teď víc a víc objevuje data oriented design. Hlavní myšlenka je rozbít objekty na části, které se používají společně a nasypat je do jednoduchého pole. Cílem je sekvenční přístup do paměti kvůli hardwarovému prefetchi a taky vytěžit maximum z každé řádky cache.