User 121 | 6/23/2014, 2:19:21 PM
After waiting for long time for an answer on http://forum.graphlab.com/discussion/229/consistency-models#latest
I read some source code to learn more about consistency models, especially the following file https://github.com/graphlab-code/graphlab/blob/master/src/graphlab/engine/asyncconsistentengine.hpp
I am trying to deduce the meaning of this statement: "The default mode is "factorized" consistency in which only individual gathers/applys/ scatters are guaranteed to be consistent, but this can be strengthened to provide full mutual exclusion"
For Edge consistency model: if Vertex V1 and V2 have an edge between them, then all gather(), apply(), scatter() at V1 must be AFTER or BEFORE gather(), apply() and scatter() on V2. (i.e. GAS on V1 must be OUT OF PHASE with GAS on V2) Is this correct ?
For factorized consistency model: if vertex V1 and V2 have an edge between them, then gather() can NOT happen simultaneously at both vertices, same of apply() and scatter(). Is this correct ? (I think not, because apply() can be executed simultaneously even on adjacent vertices)
Full mutual exclusion means nothing but the edge consistency model.
Apart from deduction of this statement, I would like to know: Why is the Edge consistency model still there ? Which algorithms / special cases would need it ? I observed that it uses distributed Chandy Misra solution to the Dining philosopher's problem. It models vertices for philosophers and edges for forks. In every function of asyncconsistenyengine.cpp, if edge consistency is used, it costs lot of time to acquire/release locks and to wait. When is this stricter consistency justifiable ?
I will appreciate your help! [Note: I am Master student at VU,Amsterdam and doing my thesis on comparison between Giraph and GraphLab]