A Bipartite graph object is created with a fixed number of e h nodes per processor. Nodes in each partition may be referenced by a global address consisting of the processor number and local node number. Each node contains a user-defined data field, and edges carry a user-defined weight tag as well as a pointer to the value of the source node. Building the Bipartite graph proceeds in two phases. The user first adds the desired to-edges for local nodes on each processor. The distributed graph is then connected; this global operation adds the corresponding from-edges and allocates buffer space on each processor for the data values from remote nodes.
A typical computation on a Bipartite graph alternates between phases updating the e and then the h node values. The user locally computes new data values for a node class based on the weight and value of connected nodes given by the from-edges. These new values must then be globally propagated by validating the node class. Once the validation completes, the next computation phase may proceed.
Bipartite_all_create, Bipartite_all_destroy, Bipartite_all_connect, Bipartite_all_eValidate and Bipartite_all_hValidate are split-phase operations which must be called by one thread per processor on all processors. A split-phase operation returns OK if it has completed upon return and WAIT otherwise. The remaining primitives are not split-phase, and they return OK if they succeed, or FAIL if exceptions occur.
Create a Bipartite object with id id and having numENodes and numHNodes numbers of e and h nodes, respectively. Store the return value into flagPtr and increment counter ctr when the operation completes.
Return a pointer to the local portion of Bipartite object id. This graph pointer may then be used in the node iteration macros Bipartite_for_eNodes and Bipartite_for_hNodes.
Bipartite_all_create must be called on all nodes to allocate the graph object.
Destroy the Bipartite object id by freeing all storage allocated for the node and edge lists. Increment the counter ctr upon completion.
Bipartite_all_create must be called on all nodes to allocate the graph object.
Insert edge from e node to h node in Bipartite object id. The local source node has number fromNode, the destination node has address (toProc, toNode), and the edge is tagged with the user-defined weight.
Bipartite_all_create must be called on all nodes to allocate the graph object and its node lists.
Insert edge from h node to e node in Bipartite object id. The local source node has number fromNode, the destination node has address (toProc, toNode), and the edge is tagged with the user-defined weight.
Bipartite_all_create must be called on all nodes to allocate the graph object and its node lists.
Connect the Bipartite object id and increment the counter ctr when the operation completes. The to-edges for e and h nodes are turned into the corresponding from-edges. For edges from remote nodes, buffer space is allocated to hold node data values.
Bipartite_all_create must be called on all nodes to create the graph object.
Validate the e nodes of the Bipartite object id and increment counter ctr upon completion.
Bipartite_all_connect must be called on all nodes to create from-edges and allocate buffer space for validation of remote node values.
Validate the h nodes of the Bipartite object id and increment counter ctr upon completion.
Bipartite_all_connect must be called on all nodes to create from-edges and allocate buffer space for validation of remote node values.
Iterate over the e nodes of the graph referenced by graphPtr, setting nodePtr to point to each successive node and setting nodeCnt to each node's index.
Bipartite_all_hValidate must be called on all nodes to update node values along remote from-edges .
Iterate over the h nodes of the graph referenced by graphPtr, setting nodePtr to point to each successive node and setting nodeCnt to each node's index.
Bipartite_all_eValidate must be called on all nodes to update node values along remote from-edges .
Iterate over the from-edges of the node referenced by nodePtr, setting edgePtr to point to each successive edge and setting edgeCnt to each edge's index.