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.)
- 1818 megtekintés
Hozzászólások
én meg lennék lepodve ha ezt kezzel kene
- A hozzászóláshoz be kell jelentkezni
Ahhoz túl kicsik a bitek. Valami pici fogó kéne ide.
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
Akkor valami mást néztem be nagyon :-(. Köszi!
- A hozzászóláshoz be kell jelentkezni