异步计算是分布式计算的一种实现方式。
以MXNet框架举例。用户可以使用不同的前端语言编写MXNet程序,如Python、R、Scala和C++。无论使用何种前端编程语言,MXNet程序的执行主要都发生在C++实现的后端。换句话说,用户写好的前端MXNet程序会传给后端执行计算。后端有自己的线程在队列中不断收集任务并执行它们。前端线程无须等待当前指令从后端线程返回结果就继续执行后面的指令。
如使用mxnet框架进行计算,其后端语言为c++,只要C++后端足够高效,那么不管前端编程语言性能如何,MXNet都可以提供一致的高性能。
定义一个计时类来观察异步计算的效果:
class Benchmark():
def __init__(self, prefix=None):
self.prefix = prefix + ' ' if prefix else ''
def __enter__(self):
self.start = time.time()
def __exit__(self, *args):
print('%stime: %.4f sec' % (self.prefix, time.time() - self.start))
with Benchmark('Workloads are queued.'):
x = nd.random.uniform(shape=(2000, 2000))
y = nd.dot(x, x).sum()
with Benchmark('Workloads are finished.'):
print('sum =', y)
<