我正在尝试实现一个简单的示例来展示如何在两个不同的 GPU 中计算两个 theano.tensor.dot。其中两个点共享相同的 A 和不同的 B。
theano.tensor.dot(A,B0); theano.tensor.dot(A,B1)
我愿意将 B0 和 B1 存储在不同的 GPU 中。而 A 最初存储在一个 GPU 中,然后我用显式传递函数复制到另一个 GPU。最后,我在两个 GPU 上分别点。
我的实现如下:
import numpy
import theano
va0 = theano.shared(numpy.random.random((1024, 1024)).astype('float32'),
target='dev0')
va1 = va0.transfer('dev1')
vb0 = theano.shared(numpy.random.random((1024, 512)).astype('float32'),
target='dev0')
vb1 = theano.shared(numpy.random.random((1024, 2048)).astype('float32'),
target='dev1')
vc0 = theano.tensor.dot(va0,vb0)
vc1 = theano.tensor.dot(va1,vb1)
f = theano.function([], [vc1,vc0])
print f()
当我查看 nvprof 结果时,我发现这两个点仍然在同一个 GPU 中运行。va0.tranfer('dev1') 不起作用。实际上,它将 vb1 复制到 dev0 中,并且两个点都在 dev0 中计算。
我尝试了 Theano Flags 的多种组合,但不起作用。任何人都可以帮忙吗?