Skip to content

Commit 35ce602

Browse files
committed
bug fixes
1 parent 2b1ad21 commit 35ce602

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

examples/pagerank.rs

+12-4
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ fn main() {
4242
// lists of edges, ranks, and changes.
4343
let mut edges = Vec::new();
4444
let mut ranks = Vec::new();
45+
let mut diffs = Vec::new(); // for received but un-acted upon deltas.
4546
let mut delta = Vec::new();
4647

4748
let timer = ::std::time::Instant::now();
@@ -72,6 +73,7 @@ fn main() {
7273
// 0. ensure enough state allocated
7374
while edges.len() <= src { edges.push(Vec::new()); }
7475
while ranks.len() <= src { ranks.push(1_000); }
76+
while diffs.len() <= src { diffs.push(0); }
7577

7678
// 1. subtract previous distribution.
7779
allocate(ranks[src], &edges[src][..], &mut delta);
@@ -115,13 +117,18 @@ fn main() {
115117
// 0. ensure enough state allocated
116118
while edges.len() <= src { edges.push(Vec::new()); }
117119
while ranks.len() <= src { ranks.push(1_000); }
120+
while diffs.len() <= src { diffs.push(0); }
118121

119122
// 1. subtract previous distribution.
120123
allocate(ranks[src], &edges[src][..], &mut delta);
121124
for x in delta.iter_mut() { x.1 *= -1; }
122125

123126
// 2. update ranks.
124-
ranks[src] += diff;
127+
diffs[src] += diff;
128+
if diffs[src].abs() >= 6 {
129+
ranks[src] += diffs[src];
130+
diffs[src] = 0;
131+
}
125132

126133
// 3. re-distribute allocations.
127134
allocate(ranks[src], &edges[src][..], &mut delta);
@@ -197,10 +204,11 @@ fn allocate(rank: i64, edges: &[(usize, i64)], send: &mut Vec<(usize, i64)>) {
197204
assert!(rank >= 0);
198205
assert!(edges.iter().all(|x| x.1 > 0));
199206

200-
let degree: i64 = edges.iter().map(|x| x.1 as i64).sum();
201-
let share = ((rank * 5) / 6) / degree;
207+
let distribute = (rank * 5) / 6;
208+
let degree = edges.len() as i64;
209+
let share = distribute / degree;
202210
for i in 0 .. edges.len() {
203-
if (i as i64) < (share % (edges.len() as i64)) {
211+
if (i as i64) < (distribute % (edges.len() as i64)) {
204212
send.push((edges[i].0, edges[i].1 * (share + 1)));
205213
}
206214
else {

0 commit comments

Comments
 (0)