Skip to content

Instantly share code, notes, and snippets.

@vedantk
Created March 16, 2012 05:19
Show Gist options
  • Save vedantk/2048604 to your computer and use it in GitHub Desktop.
Save vedantk/2048604 to your computer and use it in GitHub Desktop.
Distributed matrix multiplication with Bridge
#!/usr/bin/python
import sys
from random import random
from flotype.bridge import Bridge
bridge = Bridge(api_key='abcdefgh')
def start_job():
n = 32
worker = bridge.get_service('worker')
make_row = lambda: [random() for k in range(n)]
make_mat = lambda: [make_row() for k in range(n)]
cur, lhs, rhs = make_mat(), make_mat(), make_mat()
matrix_multiply(worker, cur, lhs, rhs)
def matrix_multiply(worker, C, A, B):
n = len(C)
for i in range(n):
row = A[i]
for j in range(n):
col = [B[k][j] for k in range(n)]
helper = handle_result(C, i, j)
worker.compute(row, col, helper)
def handle_result(C, i, j):
def setter(val):
C[i][j] += val
print('C[%d][%d] = %f' % (i, j, val))
return setter
def start_worker():
bridge.publish_service('worker', Worker)
class Worker(bridge.Service):
def compute(self, lhs, rhs, callback):
print('Worker.compute called on <%d>.' % (id(self)))
callback(sum([lhs[k] * rhs[k] for k in range(len(lhs))]))
if __name__ == '__main__':
if '--master' in sys.argv:
bridge.ready(start_job)
else:
bridge.ready(start_worker)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment