Created
March 16, 2012 05:19
-
-
Save vedantk/2048604 to your computer and use it in GitHub Desktop.
Distributed matrix multiplication with Bridge
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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