| 

.NET C# Java Javascript Exception

1
Es gibt verschiedene Cache-Kohärenzprotokolle (MESI, Multiple Reader - Single Writer etc.). Mir ist klar, dass diese Mechanismen gewährleisten, dass jeder Prozessor bzw. jeder Rechenkern beim Anfordern immer den aktuellen Wert einer Variable erhält. Ganz gleich in welchem Cache sie sich aktuell befindet und welcher Kern sie gerade erst verändert hat.

Was mir noch nicht ganz klar ist (und ich vermute ich stelle hier gerade eine relativ naive Frage), wir kümmern uns in der parallelen Programmierung relativ aufwendig um Synchronisation. In Java bespw. u.a. mittels synchronized, unter pthreds mit mutexen usw.
Bedeutet dies, dass ein Kohärenzmodell nur Kernübergreifend funktioniert und Kernintern nicht umsetzbar ist? D.h. wenn ich 4 Prozessoren á 8 Kerne habe, dann sind mittels des Kohärenzmodells MESI bspw. 32 Kerne so koordiniert, dass jeder dieser Kerne IMMER den aktuellen Wert einer Variable bekommt. Um Synchronisation müssen wir uns jetzt aber absolut gar nicht mehr kümmern, wenn wir für eine parallele Verarbeitung 32 Threads auf 32 Kerne mappen. Ist das richtig?

Sobald wir aber mehrere Threads auf einem Kern laufen lassen, müssen diese gegen einander synchronisiert werden (bei Bedarf), weil Kernintern kein Protokoll greift. Richtig?
11.08.2014
Parallels 47 4