提交 0dc3913f authored 作者: Frederic Bastien's avatar Frederic Bastien

Add a test that make GpuElemwise compilation crash

上级 8757c2dc
...@@ -474,3 +474,49 @@ def test_Gpujoin_inplace(): ...@@ -474,3 +474,49 @@ def test_Gpujoin_inplace():
f = theano.function([s], theano.Out(c, borrow=True)) f = theano.function([s], theano.Out(c, borrow=True))
assert x.get_value(borrow=True, return_internal_type=True) is f(0) assert x.get_value(borrow=True, return_internal_type=True) is f(0)
assert np.allclose(f(0), [3, 4, 5]) assert np.allclose(f(0), [3, 4, 5])
def test_many_arg_elemwise():
"""this test checks whether the + and * elemwise ops can handle extremely large numbers of
arguments on gpu
i.e., it is a test of the optimization theano/sandbox/cuda/opt.py:local_gpu_huge_add_or_mul """
rng = np.random.RandomState([1, 2, 3])
for num_args in [25, 125]:
for op_to_test in [theano.tensor.add, theano.tensor.mul]:
for nb_dim in [2, 3, 4, 5]:
shapes = [rng.randint(1, 5) for i in range(nb_dim)]
args = [np.cast['float32'](rng.randn(*shapes))
for arg in xrange(0, num_args)]
symb_args = [theano.tensor.TensorType('float32',
(False,) * nb_dim)()
for arg in xrange(0, num_args)]
outputs = []
for mode in [mode_with_gpu, mode_without_gpu]:
# test the optijmization local_gpu_elemwise_0
f = theano.function(
symb_args, op_to_test(*symb_args),
mode=mode.excluding("local_gpu_elemwise_1"))
outputs.append(f(*args))
# assert that the test was done on the gpu.
if mode is mode_with_gpu:
assert any([isinstance(node.op, GpuElemwise)
for node in f.maker.fgraph.apply_nodes])
# test the optijmization local_gpu_elemwise_1
f = theano.function(
symb_args,
GpuFromHost(test_ctx_name)(op_to_test(*symb_args)),
mode=mode.excluding("local_gpu_elemwise_0"))
out = f(*args)
# assert that the test was done on the gpu.
if mode is mode_with_gpu:
assert any([isinstance(node.op, GpuElemwise)
for node in f.maker.fgraph.apply_nodes])
utt.assert_allclose(out, outputs[-1])
results_gpu, results_cpu = outputs
utt.assert_allclose(results_gpu, results_cpu)
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论