CPU cache ürítés [megoldva]

 ( asch | 2010. október 7., csütörtök - 11:03 )

Sziasztok!

Van két processzem, amik szemaforokkal és shared memory-n keresztül kommunikálnak. A kérdés, hogy az L1, L2 (L3?) cache okozta inkonzisztenciát hogyan lehet elkerülni?

* termelő memóriába ír
* termelő biztosítja, hogy minden amit írt a CPU cache-éből a RAM-ba kerüljön
* termelő a szemaforon jelzi, hogy kész egy bála
* fogyasztó a szemaforra várt
* fogyasztó biztosítja, hogy ne olvasson a CPU cache-ből régi értékeket
* fogyasztó a memóriából kiolvassa, ami kell neki

A sima betűs részeket az shm_open, mmap és sem_open hívásokkal meg lehet tenni. Kérdés, hogy a vastagított műveleteket hogyan lehet megtenni?

x86_64 architektúráról van szó. A cacheflush hívásra lenne szükségem, de az úgy látszik nem elérhető x86_64-en. (http://linux.die.net/man/2/cacheflush)

Elsősorban Linux és Windows a cél, de jó lenne hordozható megoldás.

Szerk.: Andrei válasza szerint X86-os architektúrán a magok közötti cache szinkronizáció automatikus. (A hibát ami miatt cache inkonzisztenciára gyanakodtam megtaláltam a programomban.)

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

én meg lennék lepodve ha ezt kezzel kene

Ahhoz túl kicsik a bitek. Valami pici fogó kéne ide.

Ezzel neked nem kell foglalkozni, mert az az SMP modell, amit az AMD es az Intel hasznal garantalja a cache koherenciat.

A Core architektura odaig megy, hogy a magok L2-je magparonkent osztott.

Az AMD procikban egy NUMA megoldas van, ami azt jelenti, hogy adott cimek a fizikai memoriaban adott maghoz tartoznak, azaz csak annak a magnak az L2 cache-eben lesz benne, amelyikhez az adott cim tartozik. Masik maghoz tartozo cimekrol adatot a HyperTransport linken keresztul cserelnek.

Mindenesetre a cache koherencia biztositott az L1,L2 es L3 szintjen is.

Akkor valami mást néztem be nagyon :-(. Köszi!