提交 27f49908 authored 作者: notoraptor's avatar notoraptor 提交者: GitHub

Update to fix python 3 error

Update test function test_pycuda_memory_to_theano() to fix Python 3 error. The refcount of a variable seems to be different between Python 2 and Python 3. So it seems better to stock an initial refcount in a variable and then do the checkings with that variable instead of directly using comparing to constant values. Tests passed with Python 3 (Anaconda): ``` $ nosetests --verbose --nocapture theano/misc/tests/test_pycuda_theano_simple.py Run pycuda only example to test that pycuda works. ... ok Simple example with pycuda function and Theano CudaNdarray object. ... ok theano.misc.tests.test_pycuda_theano_simple.test_pycuda_memory_to_theano ... 4 gpuarray ref count before creating a CudaNdarray 4 strides (20, 5, 1) gpuarray ref count after creating a CudaNdarray 5 gpuarray ref count after deleting the CudaNdarray 4 ok ---------------------------------------------------------------------- Ran 3 tests in 0.297s OK ```
上级 1db72747
...@@ -83,9 +83,10 @@ def test_pycuda_memory_to_theano(): ...@@ -83,9 +83,10 @@ def test_pycuda_memory_to_theano():
# This increase the ref count with never pycuda. Do pycuda also # This increase the ref count with never pycuda. Do pycuda also
# cache ndarray? # cache ndarray?
# print y.get() # print y.get()
initial_refcount = sys.getrefcount(y)
print("gpuarray ref count before creating a CudaNdarray", end=' ') print("gpuarray ref count before creating a CudaNdarray", end=' ')
print(sys.getrefcount(y)) print(sys.getrefcount(y))
assert sys.getrefcount(y) == 2 # assert sys.getrefcount(y) == 2
rand = numpy.random.randn(*y.shape).astype(numpy.float32) rand = numpy.random.randn(*y.shape).astype(numpy.float32)
cuda_rand = cuda_ndarray.CudaNdarray(rand) cuda_rand = cuda_ndarray.CudaNdarray(rand)
...@@ -100,16 +101,19 @@ def test_pycuda_memory_to_theano(): ...@@ -100,16 +101,19 @@ def test_pycuda_memory_to_theano():
y_ptr = int(y.gpudata) y_ptr = int(y.gpudata)
z = cuda_ndarray.from_gpu_pointer(y_ptr, y.shape, strides, y) z = cuda_ndarray.from_gpu_pointer(y_ptr, y.shape, strides, y)
print("gpuarray ref count after creating a CudaNdarray", sys.getrefcount(y)) print("gpuarray ref count after creating a CudaNdarray", sys.getrefcount(y))
assert sys.getrefcount(y) == 3 # assert sys.getrefcount(y) == 3
assert sys.getrefcount(y) == initial_refcount + 1
assert (numpy.asarray(z) == 0).all() assert (numpy.asarray(z) == 0).all()
assert z.base is y assert z.base is y
# Test that we can take a view from this cuda view on pycuda memory # Test that we can take a view from this cuda view on pycuda memory
zz = z.view() zz = z.view()
assert sys.getrefcount(y) == 4 # assert sys.getrefcount(y) == 4
assert sys.getrefcount(y) == initial_refcount + 2
assert zz.base is y assert zz.base is y
del zz del zz
assert sys.getrefcount(y) == 3 # assert sys.getrefcount(y) == 3
assert sys.getrefcount(y) == initial_refcount + 1
cuda_ones = cuda_ndarray.CudaNdarray(numpy.asarray([[[1]]], cuda_ones = cuda_ndarray.CudaNdarray(numpy.asarray([[[1]]],
dtype='float32')) dtype='float32'))
...@@ -127,4 +131,5 @@ def test_pycuda_memory_to_theano(): ...@@ -127,4 +131,5 @@ def test_pycuda_memory_to_theano():
del z del z
print("gpuarray ref count after deleting the CudaNdarray", end=' ') print("gpuarray ref count after deleting the CudaNdarray", end=' ')
print(sys.getrefcount(y)) print(sys.getrefcount(y))
assert sys.getrefcount(y) == 2 # assert sys.getrefcount(y) == 2
assert sys.getrefcount(y) == initial_refcount
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论