我尝试使用以下代码测试multi-gpus的性能:
test__multi.py
import time
import numpy as np
from numpy.random import random
import theano
import theano.tensor as T
from theano import shared
from theano import function
a = time.time()
v_00 = shared(
value=random((10240, 10240)).astype(theano.config.floatX, copy=False)
,target='dev0'
)
v_01 = shared(
value=random((10240, 10240)).astype(theano.config.floatX, copy=False)
,target='dev0'
)
v_10 = shared(
value=random((10240, 10240)).astype(theano.config.floatX, copy=False)
,target='dev1'
)
v_11 = shared(
value=random((10240, 10240)).astype(theano.config.floatX, copy=False)
,target='dev1'
)
b = time.time()
print b - a
f = function(inputs=[], outputs=[
theano.tensor.dot(v_00, v_01),
theano.tensor.dot(v_10, v_11)
]
)
c = time.time()
print c - b
res0, res1 = f()
d = time.time()
print d - c
我得到的结果如附图所示,当我使用两个不同的gpu设备时没有改进。(THEANO_FLAGS ='contexts = dev0-> cuda0; dev1-> cuda1')
终端中的日志如下:
lanlin@UbuntuGpu:~$ cd python
lanlin@UbuntuGpu:~/python$ THEANO_FLAGS='contexts=dev0->cuda0;dev1->cuda0' python test__multi.py
Mapped name dev0 to device cuda0: Tesla K80 (CuDNN not available)
Mapped name dev1 to device cuda0: Tesla K80 (CuDNN not available)
6.47632694244
0.34957909584
2.27110910416
lanlin@UbuntuGpu:~/python$ THEANO_FLAGS='contexts=dev0->cuda0;dev1->cuda1' python test__multi.py
Mapped name dev0 to device cuda0: Tesla K80 (CuDNN not available)
Mapped name dev1 to device cuda1: Tesla K80 (CuDNN not available)
6.49380016327
0.36678981781
2.40865397453
答案 0 :(得分:0)
一些变化将揭示改进:
theano.tensor.dot(v_00, v_01).transfer('dev0')
。np.asarray(res0)
或甚至print(res_0)
,以及完成此操作的时间。这确保了所有计算都已完成。每次执行数学运算时,必须避免观察加速是将输出传送到CPU。从循环开始到np.assarray
调用结束所经过的时间将是计算和传输最后一个答案的总时间。循环期间经过的时间只是在GPU中排队操作的时间,而不是完成它们的时间。我不确定如何单独计算GPU执行时间;你必须推断它。