Consider an implementation of the Block-Stripe Algorithm discussed in Section 5.2 to compute page rank on a graph of N nodes (i.e., Web pages). Suppose each page has, on average, 20 links, and we divide the new rank vector into k blocks (and correspondingly, the matrix M into k stripes). Each stripe of M has one line per "source" web page, in the format:
[source_id, degree, m, dest_1, ...., dest_m]
Notice that we had to add an additional entry, m, to denote the number of destination nodes in this stripe, which of course is no more than the degree of the node. Assume that all entries (scores, degrees, identifiers,...) are encoded using 4 bytes.
There is an additional detail we need to account for, namely, locality of links. As a very simple model, assume that we divide web pages into two disjoint sets:
Introvert pages, which link only to other pages within the same host as themselves.
Extrovert pages, which have links to pages across several hosts.
Assume a fraction x of pages (0 ≤ x ≤ 1) are introverts, and the rest are extroverts.
The blocks are arranged such that pages within a host are in the same block. For simplicity, assume that the links from the extrovert pages are spread uniformly across the k stripes (this is reasonably accurate for small values of k).
Construct a formula that counts the amount of I/O per page rank iteration in terms of N, x, and k. The 4-tuples below list combinations of N, k, x, and I/O (in bytes). Pick the correct combination.
Note. There are some additional optimizations one can think of, such as striping the old score vector, encoding introvert and extrovert pages using different schemes, etc. For the purposes of working this problem, assume we don't do any optimizations beyond the block-stripe algorithm discussed in class.
N = 1 billion, k = 2, x = 0.5, 110GB
N = 1 billion, k = 2, x = 0.5, 116GB
N = 1 billion, k = 3, x = 0.5, 132GB
N = 1 billion, k = 3, x = 0.75, 124GB