Programmiermodell
Bei der Beschreibung des Datenmodells von GraphLab wurde erläutert, dass Graphen auf mehrere Computer aufgeteilt werden. Während der Ausführung der GAS-Funktionen für jeden Scheitelpunkt kann es zu Lese-/Schreib- und Schreib-/Schreibkonflikten zwischen Scheitelpunkten kommen, die sich einen Bereich teilen. Die GraphLab-Engine synchronisiert Zugriffe auf freigegebene Daten und stellt eine konsistente parallele Ausführung sicher. GraphLab unterstützt insbesondere verschiedene Engines für die Graphenausführung mit einem jeweils unterschiedlichen Maß an Konsistenz, sodass Benutzer eine Engine auswählen können, die sich hinsichtlich der Korrektheit und Leistung für ihre Anwendungen eignet. Die verschiedenen Konsistenzkonzepte, die GraphLab mithilfe seiner unterschiedlichen Engines bietet, sind: volle Konsistenz, Kantenkonsistenz und Scheitelpunktkonsistenz. Wie in Abbildung 8 gezeigt wird, hat die Aktualisierungsfunktion bei voller Konsistenz an jedem Scheitelpunkt (Scheitelpunkt 3) einen exklusiven Lese- und Schreibzugriff auf ihren eigenen Scheitelpunkt, benachbarte Kanten und benachbarte Scheitelpunkte (d. h. ihren gesamten Bereich). Diese Anordnung gewährleistet zwar eine hohe Konsistenz und volle Korrektheit, schränkt jedoch die Parallelität und somit die Leistung ein. In vielen MLDM-Algorithmen benötigen Scheitelpunkte jedoch keinen exklusiven Lese-/Schreibzugriff auf ihren gesamten Bereich. Der PageRank-Algorithmus erfordert beispielsweise nur Lesezugriff auf benachbarte Kanten und Scheitelpunkte.
Um die Parallelität zu erhöhen und eine größere Anzahl von Konsistenzeinstellungen zu unterstützen, die sich für unterschiedliche MLDM-Anwendungen eignen, bietet GraphLab daher das Konzept der Kantenkonsistenz und der Scheitelpunktkonsistenz. Bei der Kantenkonsistenz hat die Aktualisierungsfunktion an einem Scheitelpunkt einen exklusiven Lese-/Schreibzugriff auf ihren Scheitelpunkt und die benachbarten Kanten, aber nur einen schreibgeschützten Zugriff auf benachbarte Scheitelpunkte. Dieses Protokoll reduziert naturgemäß die Konsistenz und ermöglicht eine bessere Nutzung der Parallelität. Bei der Scheitelpunktkonsistenz hat die Aktualisierungsfunktion an einem Scheitelpunkt nur für ihren eigenen Scheitelpunkt einen exklusiven Schreibzugriff, sodass alle Aktualisierungsfunktionen gleichzeitig ausgeführt werden können. Diese Funktion bietet größtmögliche Parallelität, im Gegenzug aber auch die geringste Konsistenz. GraphLab-Benutzer können eine Engine auswählen, welche die gewünschte Leistung mithilfe des erforderlichen Konsistenzmodells, das sie für ihre Anwendungen für geeignet halten, bereitstellt.
Abbildung 8: Die von GraphLab bereitgestellten Modelle für vollständige Konsistenz, Kantenkonsistenz und Scheitelpunktkonsistenz. Das Modell für volle Konsistenz weist die stärkste Konsistenz auf, das Modell für Scheitelpunktkonsistenz hingegen die geringste Konsistenz. Wenn die Konsistenz reduziert wird, wird die Parallelität erhöht und umgekehrt.
Im Rahmen seiner Shared-Memory-Ansicht speichert GraphLab Ghosts in lokalen Speichern. „Ghosts“ bezeichnet die Adjazenzinformationen und -daten der einzelnen Scheitelpunkte. Ein Scheitelpunkt-Ghost stellt sicher, dass die Aktualisierungsfunktion des Scheitelpunkts direkten Speicherzugriff auf alle Daten innerhalb seines Bereichs hat.