from IPython.parallel import Client, require, interactive rc = Client() dv = rc.direct_view() lv = rc.load_balanced_view() with dv.sync_imports(): import numpy mat = numpy.random.random_sample((800, 800)) mat = numpy.asfortranarray(mat) def simple_inner(i): column = mat[:, i] # have to use a list comprehension to prevent closure return sum([numpy.inner(column, mat[:, j]) for j in xrange(i + 1, mat.shape[1])]) %timeit sum(simple_inner(i) for i in xrange(mat.shape[1] - 1)) dv.push(dict(mat=mat), block=True); %timeit sum(dv.map(simple_inner, range(mat.shape[1] - 1), block=False)) %timeit sum(lv.map(simple_inner, range(mat.shape[1] - 1), ordered=False, chunksize=(mat.shape[1] - 1) // len(lv), block=False)) %px mat = numpy.asfortranarray(mat) %timeit sum(dv.map(simple_inner, range(mat.shape[1] - 1), block=False)) %timeit sum(lv.map(simple_inner, range(mat.shape[1] - 1), ordered=False, chunksize=(mat.shape[1] - 1) // len(lv), block=False)) def inner(i, j): return numpy.inner(mat[:, i], mat[:, j]) first = [i for i in xrange(mat.shape[1] - 1) for j in xrange(i + 1, mat.shape[1])] second = [j for i in xrange(mat.shape[1] - 1) for j in xrange(i + 1, mat.shape[1])] %timeit sum(dv.map(inner, first, second, block=False)) %timeit sum(lv.map(inner, first, second, unordered=True, chunksize=len(first) // len(lv), block=False)) %timeit sum(map(inner, first, second))