diff options
Diffstat (limited to 'ot/gpu/cudamat/test/test_cudamat.py')
-rw-r--r-- | ot/gpu/cudamat/test/test_cudamat.py | 1217 |
1 files changed, 0 insertions, 1217 deletions
diff --git a/ot/gpu/cudamat/test/test_cudamat.py b/ot/gpu/cudamat/test/test_cudamat.py deleted file mode 100644 index 800243c..0000000 --- a/ot/gpu/cudamat/test/test_cudamat.py +++ /dev/null @@ -1,1217 +0,0 @@ -import numpy as np -import nose -import cudamat as cm - -def setup(): - cm.cublas_init() - -def teardown(): - cm.cublas_shutdown() - -def test_reshape(): - m = 256 - n = 1 - cm1 = np.array(np.random.rand(n, m)*10, dtype=np.float64, order='F') - cm2 = np.array(np.random.rand(m, n)*10, dtype=np.float64, order='F') - - gm1 = cm.CUDAMatrix(cm1) - gm2 = cm.CUDAMatrix(cm2) - - gm1.reshape((m, n)) - gm2.assign(gm1) - gm1.reshape((n, m)) - - gm1.copy_to_host() - gm2.copy_to_host() - - assert np.max(np.abs(gm1.numpy_array - gm2.numpy_array.T)) < 10**-2, "Error in CUDAMatrix.reshape exceeded threshold" - -def test_T_field(): - m = 256 - n = 128 - cm1 = np.array(np.random.rand(n, m)*10, dtype=np.float64, order='F') - cm2 = np.array(np.random.rand(m, 1)*10, dtype=np.float64, order='F') - gm1 = cm.CUDAMatrix(cm1) - gm2 = cm.CUDAMatrix(cm2) - - # test dot - gm = cm.dot(gm2.T, gm1.T) - c = np.dot(cm2.T, cm1.T) - gm.copy_to_host() - - assert np.max(np.abs(gm.numpy_array - c)) < 10**-2, "Error in CUDAMatrix.dot with TransposedCUDAMatrix exceeded threshold" - - # test add_dot - cm3 = np.array(np.random.rand(1, n)*10, dtype=np.float64, order='F') - gm3 = cm.CUDAMatrix(cm3) - gm3.add_dot(gm2.T, gm1.T) - c = cm3 + np.dot(cm2.T, cm1.T) - gm3.copy_to_host() - - assert np.max(np.abs(gm3.numpy_array - c)) < 10**-2, "Error in CUDAMatrix.add_dot TransposedCUDAMatrix exceeded threshold" - - # test add_sums - gm2.add_sums(gm1.T, axis = 1) - c = cm2 + np.atleast_2d(cm1.sum(0)).T - gm2.copy_to_host() - - assert np.max(np.abs(gm2.numpy_array - c)) < 10**-2, "Error in CUDAMatrix.add_sums TransposedCUDAMatrix exceeded threshold" - -def test_assign(): - m = 256 - n = 128 - a = np.array(np.random.rand(m, n)*10, dtype=np.float64, order='F') - b = np.array(np.random.rand(m, n)*10, dtype=np.float64, order='F') - - m1 = cm.CUDAMatrix(a) - m2 = cm.CUDAMatrix(b) - - m1.assign(m2) - m1.copy_to_host() - - assert np.max(np.abs(m1.numpy_array - m2.numpy_array)) < 10**-4, "Error in CUDAMatrix.assign exceeded threshold" - -def test_assign_scalar(): - m = 256 - n = 128 - a = np.array(np.random.rand(m, n)*10, dtype=np.float64, order='F') - - m1 = cm.CUDAMatrix(a) - - m1.assign(np.pi) - m1.copy_to_host() - - assert np.max(np.abs(m1.numpy_array - np.pi)) < 10**-4, "Error in CUDAMatrix.assign_scalar exceeded threshold" - -def test_get_row_slice(): - m = 256 - n = 128 - start = 11 - end = 54 - - a = np.array(np.random.rand(m, n)*10, dtype=np.float64, order='F') - b = np.array(np.random.rand(end-start, n)*10, dtype=np.float64, order='F') - - c = np.array(a[start:end,:], order='F') - - m1 = cm.CUDAMatrix(a) - m2 = cm.CUDAMatrix(b) - m1.get_row_slice(start, end, target = m2) - m3 = m1.get_row_slice(start, end) - m2.copy_to_host() - m3.copy_to_host() - - assert np.max(np.abs(c - m2.numpy_array)) < 10**-4, "Error in CUDAMatrix.get_row_slice exceeded threshold" - assert np.max(np.abs(c - m3.numpy_array)) < 10**-4, "Error in CUDAMatrix.get_row_slice exceeded threshold" - -def test_set_row_slice(): - m = 256 - n = 128 - start = 11 - end = 54 - - a = np.array(np.random.rand(m, n)*10, dtype=np.float64, order='F') - b = np.array(np.random.rand(end-start, n)*10, dtype=np.float64, order='F') - - c = a.copy() - c[start:end,:] = b - - m1 = cm.CUDAMatrix(a) - m2 = cm.CUDAMatrix(b) - m1.set_row_slice(start, end, m2) - m1.copy_to_host() - - assert np.max(np.abs(c - m1.numpy_array)) < 10**-4, "Error in CUDAMatrix.set_row_slice exceeded threshold" - -def test_transpose(): - m = 6 - n = 128 - - a = np.array(np.random.rand(m, n)*10, dtype=np.float64, order='F') - b = np.array(np.random.rand(n, m), dtype=np.float64, order='F') - - c = a.copy().T - - m = cm.CUDAMatrix(a) - mt1 = cm.CUDAMatrix(b) - m.transpose(target = mt1) - mt2 = m.transpose() - - mt1.copy_to_host() - mt2.copy_to_host() - - assert np.max(np.abs(c - mt1.numpy_array)) < 10**-4, "Error in CUDAMatrix.transpose exceeded threshold" - assert np.max(np.abs(c - mt2.numpy_array)) < 10**-4, "Error in CUDAMatrix.transpose exceeded threshold" - -def test_slice(): - m = 256 - n = 128 - a = np.array(np.random.rand(m, n)*10, dtype=np.float64, order='F') - - c = np.array(a[:,32:64], order='F') - - m1 = cm.CUDAMatrix(a) - m2 = m1.slice(32, 64) - m2.copy_to_host() - - assert np.max(np.abs(c - m2.numpy_array)) < 10**-4, "Error in CUDAMatrix.slice exceeded threshold" - - -def test_add_col_vec(): - m = 250 - n = 120 - a = np.array(np.random.rand(m, n)*10, dtype=np.float64, order='F') - b = np.array(np.random.rand(m, 1)*10, dtype=np.float64, order='F') - t = np.array(np.random.rand(m, n)*10, dtype=np.float64, order='F') - - c = a + b - - m1 = cm.CUDAMatrix(a) - m2 = cm.CUDAMatrix(b) - m3 = cm.CUDAMatrix(t) - - m1.add_col_vec(m2, target = m3) - m1.add_col_vec(m2) - m1.copy_to_host() - m3.copy_to_host() - - assert np.max(np.abs(c - m1.numpy_array)) < 10**-4, "Error in CUDAMatrix.add_col_vec exceeded threshold" - assert np.max(np.abs(c - m3.numpy_array)) < 10**-4, "Error in CUDAMatrix.add_col_vec exceeded threshold" - -def test_add_col_mult(): - m = 256 - n = 128 - mult = np.pi - a = np.array(np.random.rand(m, n)*10, dtype=np.float64, order='F') - b = np.array(np.random.rand(m, 1)*10, dtype=np.float64, order='F') - t = np.array(np.random.rand(m, n)*10, dtype=np.float64, order='F') - - c = a + mult * b - - m1 = cm.CUDAMatrix(a) - m2 = cm.CUDAMatrix(b) - m3 = cm.CUDAMatrix(t) - - m1.add_col_mult(m2, mult, target = m3) - m1.add_col_mult(m2, mult) - m1.copy_to_host() - m3.copy_to_host() - - assert np.max(np.abs(c - m1.numpy_array)) < 10**-4, "Error in CUDAMatrix.add_col_mult exceeded threshold" - assert np.max(np.abs(c - m3.numpy_array)) < 10**-4, "Error in CUDAMatrix.add_col_mult exceeded threshold" - -def test_add_row_vec(): - m = 256 - n = 128 - a = np.array(np.random.rand(m, n)*10, dtype=np.float64, order='F') - b = np.array(np.random.rand(1, n)*10, dtype=np.float64, order='F') - t = np.array(np.random.rand(m, n)*10, dtype=np.float64, order='F') - - c = a + b - - m1 = cm.CUDAMatrix(a) - m2 = cm.CUDAMatrix(b) - m3 = cm.CUDAMatrix(t) - - m1.add_row_vec(m2, target = m3) - m1.add_row_vec(m2) - m1.copy_to_host() - m3.copy_to_host() - - assert np.max(np.abs(c - m1.numpy_array)) < 10**-4, "Error in CUDAMatrix.add_row_vec exceeded threshold" - assert np.max(np.abs(c - m3.numpy_array)) < 10**-4, "Error in CUDAMatrix.add_row_vec exceeded threshold" - -def test_mult_by_col(): - m = 256 - n = 128 - a = np.array(np.random.rand(m, n)*10, dtype=np.float64, order='F') - b = np.array(np.random.rand(m, 1)*10, dtype=np.float64, order='F') - t = np.array(np.random.rand(m, n)*10, dtype=np.float64, order='F') - - c = a * b - - m1 = cm.CUDAMatrix(a) - m2 = cm.CUDAMatrix(b) - m3 = cm.CUDAMatrix(t) - - m1.mult_by_col(m2, target = m3) - m1.mult_by_col(m2) - m1.copy_to_host() - m3.copy_to_host() - - assert np.max(np.abs(c - m1.numpy_array)) < 10**-4, "Error in CUDAMatrix.mult_by_col exceeded threshold" - assert np.max(np.abs(c - m3.numpy_array)) < 10**-4, "Error in CUDAMatrix.mult_by_col exceeded threshold" - -def test_mult_by_row(): - m = 256 - n = 128 - a = np.array(np.random.rand(m, n)*10, dtype=np.float64, order='F') - b = np.array(np.random.rand(1, n)*10, dtype=np.float64, order='F') - t = np.array(np.random.rand(m, n)*10, dtype=np.float64, order='F') - - c = a * b - - m1 = cm.CUDAMatrix(a) - m2 = cm.CUDAMatrix(b) - m3 = cm.CUDAMatrix(t) - - m1.mult_by_row(m2, target = m3) - m1.mult_by_row(m2) - m1.copy_to_host() - m3.copy_to_host() - - assert np.max(np.abs(c - m1.numpy_array)) < 10**-4, "Error in CUDAMatrix.mult_by_row exceeded threshold" - assert np.max(np.abs(c - m3.numpy_array)) < 10**-4, "Error in CUDAMatrix.mult_by_row exceeded threshold" - -def test_div_by_col(): - m = 256 - n = 128 - a = np.array(np.random.rand(m, n)*10, dtype=np.float64, order='F') - b = np.array(np.random.rand(m, 1)*10, dtype=np.float64, order='F') + 0.1 - t = np.array(np.random.rand(m, n)*10, dtype=np.float64, order='F') - - c = a / b - - m1 = cm.CUDAMatrix(a) - m2 = cm.CUDAMatrix(b) - m3 = cm.CUDAMatrix(t) - - m1.div_by_col(m2, target = m3) - m1.div_by_col(m2) - m1.copy_to_host() - m3.copy_to_host() - - assert np.max(np.abs(c - m1.numpy_array)) < 10**-4, "Error in CUDAMatrix.div_by_col exceeded threshold" - assert np.max(np.abs(c - m3.numpy_array)) < 10**-4, "Error in CUDAMatrix.div_by_col exceeded threshold" - -def test_div_by_row(): - m = 256 - n = 128 - a = np.array(np.random.rand(m, n)*10, dtype=np.float64, order='F') - b = np.array(np.random.rand(1, n)*10, dtype=np.float64, order='F') + 0.1 - t = np.array(np.random.rand(m, n)*10, dtype=np.float64, order='F') - - c = a / b - - m1 = cm.CUDAMatrix(a) - m2 = cm.CUDAMatrix(b) - m3 = cm.CUDAMatrix(t) - - m1.div_by_row(m2, target = m3) - m1.div_by_row(m2) - m1.copy_to_host() - m3.copy_to_host() - - assert np.max(np.abs(c - m1.numpy_array)) < 10**-4, "Error in CUDAMatrix.div_by_row exceeded threshold" - assert np.max(np.abs(c - m3.numpy_array)) < 10**-4, "Error in CUDAMatrix.div_by_row exceeded threshold" - -def test_sum(): - m = 256 - n = 128 - a = np.array(np.random.rand(m, n)*10, dtype=np.float64, order='F') - t1 = np.array(np.random.rand(1, n)*10, dtype=np.float64, order='F') - t2 = np.array(np.random.rand(m, 1)*10, dtype=np.float64, order='F') - - mult = 0.8 - c1 = np.atleast_2d(a.sum(0)) * mult - c2 = np.atleast_2d(a.sum(1)).T - - m = cm.CUDAMatrix(a) - mt1 = cm.CUDAMatrix(t1) - mt2 = cm.CUDAMatrix(t2) - - m.sum(axis = 0, target = mt1, mult = mult) - mt1r = m.sum(axis = 0, mult = mult) - - m.sum(axis = 1, target = mt2) - mt2r = m.sum(axis = 1) - - mt1.copy_to_host() - mt1r.copy_to_host() - mt2.copy_to_host() - mt2r.copy_to_host() - - assert np.max(np.abs(c1 - mt1.numpy_array)) < 10**-3, "Error in CUDAMatrix.sum exceeded threshold" - assert np.max(np.abs(c1 - mt1r.numpy_array)) < 10**-3, "Error in CUDAMatrix.sum exceeded threshold" - assert np.max(np.abs(c2 - mt2.numpy_array)) < 10**-3, "Error in CUDAMatrix.sum exceeded threshold" - assert np.max(np.abs(c2 - mt2r.numpy_array)) < 10**-3, "Error in CUDAMatrix.sum exceeded threshold" - -def test_sum_trans(): - m = 256 - n = 128 - a = np.array(np.random.rand(m, n)*10, dtype=np.float64, order='F') - t1 = np.array(np.random.rand(1, m)*10, dtype=np.float64, order='F') - t2 = np.array(np.random.rand(n, 1)*10, dtype=np.float64, order='F') - - c1 = np.atleast_2d(a.T.sum(0)) - c2 = np.atleast_2d(a.T.sum(1)).T - - m = cm.CUDAMatrix(a) - m.set_trans(True) - mt1 = cm.CUDAMatrix(t1) - mt2 = cm.CUDAMatrix(t2) - - m.sum(axis = 0, target = mt1) - mt1r = m.sum(axis = 0) - - m.sum(axis = 1, target = mt2) - mt2r = m.sum(axis = 1) - - mt1.copy_to_host() - mt1r.copy_to_host() - mt2.copy_to_host() - mt2r.copy_to_host() - - assert np.max(np.abs(c1 - mt1.numpy_array)) < 10**-3, "Error in CUDAMatrix.sum exceeded threshold" - assert np.max(np.abs(c1 - mt1r.numpy_array)) < 10**-3, "Error in CUDAMatrix.sum exceeded threshold" - assert np.max(np.abs(c2 - mt2.numpy_array)) < 10**-3, "Error in CUDAMatrix.sum exceeded threshold" - assert np.max(np.abs(c2 - mt2r.numpy_array)) < 10**-3, "Error in CUDAMatrix.sum exceeded threshold" - -def test_mean(): - m = 256 - n = 128 - a = np.array(np.random.rand(m, n)*10, dtype=np.float64, order='F') - t1 = np.array(np.random.rand(1, n)*10, dtype=np.float64, order='F') - t2 = np.array(np.random.rand(m, 1)*10, dtype=np.float64, order='F') - - c1 = np.atleast_2d(a.mean(0)) - c2 = np.atleast_2d(a.mean(1)).T - - m = cm.CUDAMatrix(a) - mt1 = cm.CUDAMatrix(t1) - mt2 = cm.CUDAMatrix(t2) - - m.mean(axis = 0, target = mt1) - mt1r = m.mean(axis = 0) - - m.mean(axis = 1, target = mt2) - mt2r = m.mean(axis = 1) - - mt1.copy_to_host() - mt1r.copy_to_host() - mt2.copy_to_host() - mt2r.copy_to_host() - - assert np.max(np.abs(c1 - mt1.numpy_array)) < 10**-3, "Error in CUDAMatrix.sum exceeded threshold" - assert np.max(np.abs(c1 - mt1r.numpy_array)) < 10**-3, "Error in CUDAMatrix.sum exceeded threshold" - assert np.max(np.abs(c2 - mt2.numpy_array)) < 10**-3, "Error in CUDAMatrix.sum exceeded threshold" - assert np.max(np.abs(c2 - mt2r.numpy_array)) < 10**-3, "Error in CUDAMatrix.sum exceeded threshold" - -def test_add_sums(): - m = 256 - n = 128 - - a = np.array(np.random.rand(m, n)*10, dtype=np.float64, order='F') - t1 = np.array(np.random.rand(m, 1)*10, dtype=np.float64, order='F') - t2 = np.array(np.random.rand(1, n)*10, dtype=np.float64, order='F') - - mult = np.pi - beta = 0.7 - - c1 = beta * t1 + mult * np.atleast_2d(a.sum(1)).T - c2 = t2 + np.atleast_2d(a.sum(0)) - - m = cm.CUDAMatrix(a) - mt1 = cm.CUDAMatrix(t1) - mt2 = cm.CUDAMatrix(t2) - - mt1.add_sums(m, axis = 1, mult = np.pi, beta = beta) - mt2.add_sums(m, axis = 0) - - mt1.copy_to_host() - mt2.copy_to_host() - - assert np.max(np.abs(c1 - mt1.numpy_array)) < 10**-3, "Error in CUDAMatrix.add_sums exceeded threshold" - assert np.max(np.abs(c2 - mt2.numpy_array)) < 10**-3, "Error in CUDAMatrix.add_sums exceeded threshold" - - -def test_less_than(): - m = 256 - n = 128 - a = np.array(np.random.randn(m, n)*10, dtype=np.float64, order='F') - b = np.array(np.random.randn(m, n)*10, dtype=np.float64, order='F') - t1 = np.array(np.random.randn(m, n)*10, dtype=np.float64, order='F') - t2 = np.array(np.random.randn(m, n)*10, dtype=np.float64, order='F') - v = 0.1 - - r1 = 1 * (a < b) - r2 = 1 * (a < v) - - da = cm.CUDAMatrix(a) - db = cm.CUDAMatrix(b) - dt1 = cm.CUDAMatrix(t1) - dt2 = cm.CUDAMatrix(t2) - - da.less_than(db, target = dt1) - da.less_than(v, target = dt2) - da.less_than(db) - - da.copy_to_host() - dt1.copy_to_host() - dt2.copy_to_host() - - assert np.max(np.abs(r1 - da.numpy_array)) < 10**-4, "Error in CUDAMatrix.less_than exceeded threshold" - assert np.max(np.abs(r1 - dt1.numpy_array)) < 10**-4, "Error in CUDAMatrix.less_than exceeded threshold" - assert np.max(np.abs(r2 - dt2.numpy_array)) < 10**-4, "Error in CUDAMatrix.less_than exceeded threshold" - -def test_greater_than(): - m = 256 - n = 128 - a = np.array(np.random.randn(m, n)*10, dtype=np.float64, order='F') - b = np.array(np.random.randn(m, n)*10, dtype=np.float64, order='F') - t1 = np.array(np.random.randn(m, n)*10, dtype=np.float64, order='F') - t2 = np.array(np.random.randn(m, n)*10, dtype=np.float64, order='F') - v = 0.1 - - r1 = 1 * (a > b) - r2 = 1 * (a > v) - - da = cm.CUDAMatrix(a) - db = cm.CUDAMatrix(b) - dt1 = cm.CUDAMatrix(t1) - dt2 = cm.CUDAMatrix(t2) - - da.greater_than(db, target = dt1) - da.greater_than(v, target = dt2) - da.greater_than(db) - - da.copy_to_host() - dt1.copy_to_host() - dt2.copy_to_host() - - assert np.max(np.abs(r1 - da.numpy_array)) < 10**-4, "Error in CUDAMatrix.greater_than exceeded threshold" - assert np.max(np.abs(r1 - dt1.numpy_array)) < 10**-4, "Error in CUDAMatrix.greater_than exceeded threshold" - assert np.max(np.abs(r2 - dt2.numpy_array)) < 10**-4, "Error in CUDAMatrix.greater_than exceeded threshold" - -def test_minimum(): - m = 256 - n = 128 - a = np.array(np.random.randn(m, n)*10, dtype=np.float64, order='F') - b = np.array(np.random.randn(m, n)*10, dtype=np.float64, order='F') - t1 = np.array(np.random.randn(m, n)*10, dtype=np.float64, order='F') - t2 = np.array(np.random.randn(m, n)*10, dtype=np.float64, order='F') - v = 0.1 - - r1 = np.minimum(a, b) - r2 = np.minimum(a, v) - - da = cm.CUDAMatrix(a) - db = cm.CUDAMatrix(b) - dt1 = cm.CUDAMatrix(t1) - dt2 = cm.CUDAMatrix(t2) - - da.minimum(db, target = dt1) - da.minimum(v, target = dt2) - da.minimum(db) - - da.copy_to_host() - dt1.copy_to_host() - dt2.copy_to_host() - - assert np.max(np.abs(r1 - da.numpy_array)) < 10**-4, "Error in CUDAMatrix.minimum exceeded threshold" - assert np.max(np.abs(r1 - dt1.numpy_array)) < 10**-4, "Error in CUDAMatrix.minimum exceeded threshold" - assert np.max(np.abs(r2 - dt2.numpy_array)) < 10**-4, "Error in CUDAMatrix.minimum exceeded threshold" - -def test_maximum(): - m = 256 - n = 128 - a = np.array(np.random.randn(m, n)*10, dtype=np.float64, order='F') - b = np.array(np.random.randn(m, n)*10, dtype=np.float64, order='F') - t1 = np.array(np.random.randn(m, n)*10, dtype=np.float64, order='F') - t2 = np.array(np.random.randn(m, n)*10, dtype=np.float64, order='F') - v = 0.1 - - r1 = np.maximum(a, b) - r2 = np.maximum(a, v) - - da = cm.CUDAMatrix(a) - db = cm.CUDAMatrix(b) - dt1 = cm.CUDAMatrix(t1) - dt2 = cm.CUDAMatrix(t2) - - da.maximum(db, target = dt1) - da.maximum(v, target = dt2) - da.maximum(db) - - da.copy_to_host() - dt1.copy_to_host() - dt2.copy_to_host() - - assert np.max(np.abs(r1 - da.numpy_array)) < 10**-4, "Error in CUDAMatrix.maximum exceeded threshold" - assert np.max(np.abs(r1 - dt1.numpy_array)) < 10**-4, "Error in CUDAMatrix.maximum exceeded threshold" - assert np.max(np.abs(r2 - dt2.numpy_array)) < 10**-4, "Error in CUDAMatrix.maximum exceeded threshold" - -def test_minmax(): - m = 256 - n = 128 - for op in 'min', 'max', 'argmin', 'argmax': - for sign in (1, -1): - a = np.array(np.random.randn(m, n)*10*sign, dtype=np.float64, order='F') - t0 = np.array(np.random.rand(1, n)*10, dtype=np.float64, order='F') - t1 = np.array(np.random.rand(m, 1)*10, dtype=np.float64, order='F') - - r0 = np.atleast_2d(getattr(a, op)(0)) - r1 = np.atleast_2d(getattr(a, op)(1)) - - da = cm.CUDAMatrix(a) - dr10 = cm.CUDAMatrix(t0) - dr11 = cm.CUDAMatrix(t1) - - getattr(da, op)(axis = 0, target = dr10) - getattr(da, op)(axis = 1, target = dr11) - dr20 = getattr(da, op)(axis = 0) - dr21 = getattr(da, op)(axis = 1) - - dr10.copy_to_host() - dr11.copy_to_host() - dr20.copy_to_host() - dr21.copy_to_host() - - assert np.max(np.abs(r0 - dr10.numpy_array)) < 10**-4, "Error in CUDAMatrix.%s exceeded threshold" % op - assert np.max(np.abs(r1 - dr11.numpy_array.T)) < 10**-4, "Error in CUDAMatrix.%s exceeded threshold" % op - assert np.max(np.abs(r0 - dr20.numpy_array)) < 10**-4, "Error in CUDAMatrix.%s exceeded threshold" % op - assert np.max(np.abs(r1 - dr21.numpy_array.T)) < 10**-4, "Error in CUDAMatrix.%s exceeded threshold" % op - -def test_sign(): - m = 256 - n = 128 - a = np.array(np.random.randn(m, n)*10, dtype=np.float64, order='F') - a[0,0] = 0. - a[0,1] = -0. - t = np.array(np.random.randn(m, n)*10, dtype=np.float64, order='F') - - c = np.sign(a) - - m1 = cm.CUDAMatrix(a) - m3 = cm.CUDAMatrix(t) - - m2 = m1.sign() - m1.sign(target = m3) - - m2.copy_to_host() - m3.copy_to_host() - - assert np.max(np.abs(c - m2.numpy_array)) < 10**-4, "Error in CUDAMatrix.sign exceeded threshold" - assert np.max(np.abs(c - m3.numpy_array)) < 10**-4, "Error in CUDAMatrix.sign exceeded threshold" - -def test_sigmoid(): - m = 256 - n = 128 - a = np.array(np.random.randn(m, n)*10, dtype=np.float64, order='F') - b = np.array(np.random.randn(m, n)*10, dtype=np.float64, order='F') - - c = 1. / (1. + np.exp(-a)) - - m1 = cm.CUDAMatrix(a) - m2 = cm.CUDAMatrix(b) - m1.apply_sigmoid(target = m2) - m1.apply_sigmoid() - - m1.copy_to_host() - m2.copy_to_host() - - assert np.max(np.abs(c - m1.numpy_array)) < 10**-4, "Error in CUDAMatrix.apply_sigmoid exceeded threshold" - assert np.max(np.abs(c - m2.numpy_array)) < 10**-4, "Error in CUDAMatrix.apply_sigmoid exceeded threshold" - -def test_tanh(): - m = 256 - n = 128 - a = np.array(np.random.randn(m, n)*10, dtype=np.float64, order='F') - b = np.array(np.random.randn(m, n)*10, dtype=np.float64, order='F') - - c = np.tanh(a) - - m1 = cm.CUDAMatrix(a) - m2 = cm.CUDAMatrix(b) - m1.apply_tanh(target = m2) - m1.apply_tanh() - - m1.copy_to_host() - m2.copy_to_host() - - assert np.max(np.abs(c - m1.numpy_array)) < 10**-4, "Error in CUDAMatrix.apply_tanh exceeded threshold" - assert np.max(np.abs(c - m2.numpy_array)) < 10**-4, "Error in CUDAMatrix.apply_tanh exceeded threshold" - -def test_soft_threshold(): - m = 256 - n = 128 - a = np.array(np.random.randn(m, n)*10, dtype=np.float64, order='F') - b = np.array(np.random.randn(m, n)*10, dtype=np.float64, order='F') - - alpha = 0.5 - c = np.sign(a) * np.maximum(0, np.abs(a) - alpha) - - m1 = cm.CUDAMatrix(a) - m2 = cm.CUDAMatrix(b) - m1.apply_soft_threshold(alpha, target = m2) - m1.apply_soft_threshold(alpha) - - m1.copy_to_host() - m2.copy_to_host() - - assert np.max(np.abs(c - m1.numpy_array)) < 10**-4, "Error in CUDAMatrix.apply_soft_threshold exceeded threshold" - assert np.max(np.abs(c - m2.numpy_array)) < 10**-4, "Error in CUDAMatrix.apply_soft_threshold exceeded threshold" - -def test_log(): - m = 256 - n = 128 - a = np.array(np.random.rand(m, n)*10+0.1, dtype=np.float64, order='F') - b = np.array(np.random.rand(m, n)*10+0.1, dtype=np.float64, order='F') - - c = np.log(a) - - m1 = cm.CUDAMatrix(a) - m2 = cm.CUDAMatrix(b) - cm.log(m1, target = m2) - cm.log(m1) - - m1.copy_to_host() - m2.copy_to_host() - - assert np.max(np.abs(c - m1.numpy_array)) < 10**-4, "Error in cudamat.log exceeded threshold" - assert np.max(np.abs(c - m2.numpy_array)) < 10**-4, "Error in cudamat.log exceeded threshold" - -def test_exp(): - m = 256 - n = 128 - a = np.array(np.random.randn(m, n), dtype=np.float64, order='F') - b = np.array(np.random.randn(m, n), dtype=np.float64, order='F') - - c = np.exp(a) - - m1 = cm.CUDAMatrix(a) - m2 = cm.CUDAMatrix(b) - cm.exp(m1, target = m2) - cm.exp(m1) - - m1.copy_to_host() - m2.copy_to_host() - - assert np.max(np.abs(c - m1.numpy_array)) < 10**-4, "Error in cudamat.exp exceeded threshold" - assert np.max(np.abs(c - m2.numpy_array)) < 10**-4, "Error in cudamat.exp exceeded threshold" - -def test_gamma(): - m = 256 - n = 128 - a = np.array(np.random.rand(m, n)*5, dtype=np.float64, order='F') - b = np.array(np.random.rand(m, n)*5, dtype=np.float64, order='F') - - from scipy.special import gamma - c = gamma(a) - - m1 = cm.CUDAMatrix(a) - m2 = cm.CUDAMatrix(b) - cm.gamma(m1, target = m2) - cm.gamma(m1) - - m1.copy_to_host() - m2.copy_to_host() - - assert np.max(np.abs(c - m1.numpy_array)) < 10**-2, "Error in cudamat.gamma exceeded threshold" - assert np.max(np.abs(c - m2.numpy_array)) < 10**-2, "Error in cudamat.gamma exceeded threshold" - -def test_lgamma(): - m = 256 - n = 128 - a = np.array(np.random.rand(m, n)*10, dtype=np.float64, order='F') - b = np.array(np.random.rand(m, n)*10, dtype=np.float64, order='F') - - from scipy.special import gammaln - c = gammaln(a) - - m1 = cm.CUDAMatrix(a) - m2 = cm.CUDAMatrix(b) - cm.lgamma(m1, target = m2) - cm.lgamma(m1) - - m1.copy_to_host() - m2.copy_to_host() - - assert np.max(np.abs(c - m1.numpy_array)) < 10**-2, "Error in cudamat.lgamma exceeded threshold " + str(np.max(np.abs(c - m1.numpy_array))) - assert np.max(np.abs(c - m2.numpy_array)) < 10**-2, "Error in cudamat.lgamma exceeded threshold" - -def test_sqrt(): - m = 256 - n = 128 - a = np.array(np.random.rand(m, n)*20, dtype=np.float64, order='F') - b = np.array(np.random.rand(m, n), dtype=np.float64, order='F') - - c = np.sqrt(a) - - m1 = cm.CUDAMatrix(a) - m2 = cm.CUDAMatrix(b) - cm.sqrt(m1, target = m2) - cm.sqrt(m1) - - m1.copy_to_host() - m2.copy_to_host() - - assert np.max(np.abs(c - m1.numpy_array)) < 10**-4, "Error in cudamat.sqrt exceeded threshold" - assert np.max(np.abs(c - m2.numpy_array)) < 10**-4, "Error in cudamat.sqrt exceeded threshold" - -def test_pow(): - m = 256 - n = 128 - a = np.array(np.random.randn(m, n)*20, dtype=np.float64, order='F') - b = np.array(np.random.rand(m, n), dtype=np.float64, order='F') - p = 2 - - c = a**p - - m1 = cm.CUDAMatrix(a) - m2 = cm.CUDAMatrix(b) - cm.pow(m1, p, target = m2) - cm.pow(m1, p) - - m1.copy_to_host() - m2.copy_to_host() - - assert np.max(np.abs(c - m1.numpy_array)) < 10**-3, "Error in cudamat.pow exceeded threshold" - assert np.max(np.abs(c - m2.numpy_array)) < 10**-3, "Error in cudamat.pow exceeded threshold" - -def test_pow_matrix(): - m = 256 - n = 128 - a = np.array(np.random.rand(m, n)*20, dtype=np.float64, order='F') - b = np.array(np.random.rand(m, n), dtype=np.float64, order='F') - p = np.array(np.random.randn(m, n), dtype=np.float64, order='F') - - - c = a**p - - m1 = cm.CUDAMatrix(a) - m2 = cm.CUDAMatrix(b) - mp = cm.CUDAMatrix(p) - cm.pow(m1, mp, target = m2) - cm.pow(m1, mp) - - m1.copy_to_host() - m2.copy_to_host() - - assert np.max(np.abs(c - m1.numpy_array)) < 10**-2, "Error in cudamat.pow exceeded threshold" - assert np.max(np.abs(c - m2.numpy_array)) < 10**-2, "Error in cudamat.pow exceeded threshold" - -def test_reciprocal(): - m = 256 - n = 128 - a = np.array(np.random.rand(m, n)*10+10**-3, dtype=np.float64, order='F') - b = np.array(np.random.rand(m, n)*10, dtype=np.float64, order='F') - - c = 1. / a - - m1 = cm.CUDAMatrix(a) - m2 = cm.CUDAMatrix(b) - m1.reciprocal(target = m2) - m1.reciprocal() - - m1.copy_to_host() - m2.copy_to_host() - - assert np.max(np.abs(c - m1.numpy_array)) < 10**-4, "Error in CUDAMatrix.reciprocal exceeded threshold" - assert np.max(np.abs(c - m2.numpy_array)) < 10**-4, "Error in CUDAMatrix.reciprocal exceeded threshold" - -def test_add_mult(): - m = 256 - n = 128 - alpha = np.pi - a = np.array(np.random.randn(m, n)*10, dtype=np.float64, order='F') - b = np.array(np.random.randn(m, n)*10, dtype=np.float64, order='F') - - c = a + np.pi * b - - m1 = cm.CUDAMatrix(a) - m2 = cm.CUDAMatrix(b) - m1.add_mult(m2, np.pi) - m1.copy_to_host() - - assert np.max(np.abs(c - m1.numpy_array)) < 10**-4, "Error in CUDAMatrix.add_mult exceeded threshold" - -def test_subtract_mult(): - m = 256 - n = 128 - alpha = np.pi - a = np.array(np.random.randn(m, n)*10, dtype=np.float64, order='F') - b = np.array(np.random.randn(m, n)*10, dtype=np.float64, order='F') - - c = a - np.pi * b - - m1 = cm.CUDAMatrix(a) - m2 = cm.CUDAMatrix(b) - m1.subtract_mult(m2, np.pi) - m1.copy_to_host() - - assert np.max(np.abs(c - m1.numpy_array)) < 10**-4, "Error in CUDAMatrix.subtract_mult exceeded threshold" - -def test_add(): - m = 256 - n = 128 - a = np.array(np.random.randn(m, n)*10, dtype=np.float64, order='F') - b = np.array(1.+np.random.rand(m, n)*10, dtype=np.float64, order='F') - t = np.array(np.empty((m, n)), dtype=np.float64, order='F') - - c = a + b - - m1 = cm.CUDAMatrix(a) - m2 = cm.CUDAMatrix(b) - m3 = cm.CUDAMatrix(t) - - m1.add(m2, target = m3) - m1.add(m2) - - m3.copy_to_host() - m1.copy_to_host() - - assert np.max(np.abs(c - m3.numpy_array)) < 10**-4, "Error in CUDAMatrix.add exceeded threshold" - assert np.max(np.abs(c - m1.numpy_array)) < 10**-4, "Error in CUDAMatrix.add exceeded threshold" - -def test_subtract(): - m = 256 - n = 128 - a = np.array(np.random.randn(m, n)*10, dtype=np.float64, order='F') - b = np.array(1.+np.random.rand(m, n)*10, dtype=np.float64, order='F') - t = np.array(np.empty((m, n)), dtype=np.float64, order='F') - - c = a - b - - m1 = cm.CUDAMatrix(a) - m2 = cm.CUDAMatrix(b) - m3 = cm.CUDAMatrix(t) - - m1.subtract(m2, target = m3) - m1.subtract(m2) - - m3.copy_to_host() - m1.copy_to_host() - - assert np.max(np.abs(c - m3.numpy_array)) < 10**-4, "Error in CUDAMatrix.subtract exceeded threshold" - assert np.max(np.abs(c - m1.numpy_array)) < 10**-4, "Error in CUDAMatrix.subtract exceeded threshold" - -def test_divide(): - m = 256 - n = 128 - a = np.array(np.random.randn(m, n)*10, dtype=np.float64, order='F') - b = np.array(1.+np.random.rand(m, n)*10, dtype=np.float64, order='F') - t = np.array(np.empty((m, n)), dtype=np.float64, order='F') - - c = a / b - - m1 = cm.CUDAMatrix(a) - m2 = cm.CUDAMatrix(b) - m3 = cm.CUDAMatrix(t) - - m1.divide(m2, target = m3) - m1.divide(m2) - - m3.copy_to_host() - m1.copy_to_host() - - assert np.max(np.abs(c - m3.numpy_array)) < 10**-4, "Error in CUDAMatrix.div exceeded threshold" - assert np.max(np.abs(c - m1.numpy_array)) < 10**-4, "Error in CUDAMatrix.div exceeded threshold" - -def test_mult(): - m = 256 - n = 128 - a = np.array(np.random.randn(m, n)*10, dtype=np.float64, order='F') - b = np.array(np.random.randn(m, n)*10, dtype=np.float64, order='F') - t = np.array(np.empty((m, n)), dtype=np.float64, order='F') - - c = a * b - - m1 = cm.CUDAMatrix(a) - m2 = cm.CUDAMatrix(b) - m3 = cm.CUDAMatrix(t) - - m1.mult(m2, target = m3) - m1.mult(m2) - - m3.copy_to_host() - m1.copy_to_host() - - assert np.max(np.abs(c - m3.numpy_array)) < 10**-4, "Error in CUDAMatrix.multiply exceeded threshold" - assert np.max(np.abs(c - m1.numpy_array)) < 10**-4, "Error in CUDAMatrix.multiply exceeded threshold" - -def test_scalar_mult(): - m = 256 - n = 128 - alpha = np.pi - a = np.array(np.random.randn(m, n)*10, dtype=np.float64, order='F') - t = np.array(np.empty((m, n)), dtype=np.float64, order='F') - - c = a * alpha - - m1 = cm.CUDAMatrix(a) - m2 = cm.CUDAMatrix(t) - - m1.mult(alpha, target = m2) - m1.mult(alpha) - - m1.copy_to_host() - m2.copy_to_host() - - assert np.max(np.abs(c - m1.numpy_array)) < 10**-4, "Error in CUDAMatrix.mult exceeded threshold" - assert np.max(np.abs(c - m2.numpy_array)) < 10**-4, "Error in CUDAMatrix.mult exceeded threshold" - -def test_scalar_div(): - m = 256 - n = 128 - alpha = np.pi - a = np.array(np.random.randn(m, n)*10, dtype=np.float64, order='F') - t = np.array(np.empty((m, n)), dtype=np.float64, order='F') - - c = a / alpha - - m1 = cm.CUDAMatrix(a) - m2 = cm.CUDAMatrix(t) - - m1.divide(alpha, target = m2) - m1.divide(alpha) - - m1.copy_to_host() - m2.copy_to_host() - - assert np.max(np.abs(c - m1.numpy_array)) < 10**-4, "Error in CUDAMatrix.divide exceeded threshold" - assert np.max(np.abs(c - m2.numpy_array)) < 10**-4, "Error in CUDAMatrix.divide exceeded threshold" - -def test_add_scalar(): - m = 256 - n = 128 - alpha = np.pi - a = np.array(np.random.randn(m, n)*10, dtype=np.float64, order='F') - t = np.array(np.empty((m, n)), dtype=np.float64, order='F') - - c = a + alpha - - m1 = cm.CUDAMatrix(a) - m2 = cm.CUDAMatrix(t) - - m1.add(alpha, target = m2) - m1.add(alpha) - - m1.copy_to_host() - m2.copy_to_host() - - assert np.max(np.abs(c - m1.numpy_array)) < 10**-4, "Error in CUDAMatrix.add_scalar exceeded threshold" - assert np.max(np.abs(c - m2.numpy_array)) < 10**-4, "Error in CUDAMatrix.add_scalar exceeded threshold" - -def test_dot(): - m = 128 - k = 256 - n = 64 - a = np.array(np.random.randn(m, k)*10, dtype=np.float64, order='F') - b = np.array(np.random.randn(k, n)*10, dtype=np.float64, order='F') - c = np.array(np.random.randn(m, n)*10, dtype=np.float64, order='F') - - alpha = 2. - beta = 0.3 - r = beta * c + alpha * np.dot(a, b) - - m1 = cm.CUDAMatrix(a) - m2 = cm.CUDAMatrix(b) - m3 = cm.CUDAMatrix(c) - m3 = cm.dot(m1, m2, target = m3, alpha = alpha, beta = beta) - m3.copy_to_host() - - assert np.max(np.abs(r - m3.numpy_array)) < 10**-2, "Error in CUDAMatrix.dot exceeded threshold" - -def test_dot_trans(): - m = 128 - k = 256 - n = 64 - a = np.array(np.random.randn(k, m)*10, dtype=np.float64, order='F') - b = np.array(np.random.randn(k, n)*10, dtype=np.float64, order='F') - - c = np.dot(a.T, b) - - m1 = cm.CUDAMatrix(a) - m2 = cm.CUDAMatrix(b) - m1.set_trans(True); - m3 = cm.dot(m1, m2) - m3.copy_to_host() - - assert np.max(np.abs(c - m3.numpy_array)) < 10**-2, "Error in CUDAMatrix.dot exceeded threshold" - -def test_dot_vect(): - m = 128 - k = 256 - n = 1 - a = np.array(np.random.randn(m, k)*10, dtype=np.float64, order='F') - b = np.array(np.random.randn(k, n)*10, dtype=np.float64, order='F') - A = cm.CUDAMatrix(a) - B = cm.CUDAMatrix(b) - - c = np.dot(a, b) - C = cm.dot(A, B) - assert np.max(np.abs(c - C.asarray())) < 10**-2, "Error in CUDAMatrix.dot exceeded threshold" - - c = np.dot(a.T, b[:m]) - C = cm.dot(A.T, B.slice(0, m)) - assert np.max(np.abs(c - C.asarray())) < 10**-2, "Error in CUDAMatrix.dot exceeded threshold" - - c = np.dot(b.T, a.T) - C = cm.dot(B.T, A.T) - assert np.max(np.abs(c - C.asarray())) < 10**-2, "Error in CUDAMatrix.dot exceeded threshold" - - c = np.dot(b[:m].T, a) - C = cm.dot(B.slice(0, m).reshape((1, m)), A) - assert np.max(np.abs(c - C.asarray())) < 10**-2, "Error in CUDAMatrix.dot exceeded threshold" - -def test_add_dot(): - m = 128 - k = 256 - n = 64 - a = np.array(np.random.randn(m, k)*10, dtype=np.float64, order='F') - b = np.array(np.random.randn(k, n)*10, dtype=np.float64, order='F') - c = np.array(np.random.randn(m, n)*10, dtype=np.float64, order='F') - - mult = 2.1 - beta = 0.8 - res = beta * c + mult * np.dot(a, b) - - m1 = cm.CUDAMatrix(a) - m2 = cm.CUDAMatrix(b) - m3 = cm.CUDAMatrix(c) - m3.add_dot(m1, m2, mult = mult, beta = beta) - - m3.copy_to_host() - - assert np.max(np.abs(res - m3.numpy_array)) < 10**-2, "Error in CUDAMatrix.add_dot exceeded threshold" - -def test_vdot(): - m = 64 - n = 64 - a = np.array(np.random.randn(m, n), dtype=np.float64, order='F') - b = np.array(np.random.randn(m, n), dtype=np.float64, order='F') - - true_res = np.vdot(a, b) - - m1 = cm.CUDAMatrix(a) - m2 = cm.CUDAMatrix(b) - - res = cm.vdot(m1, m2) - - assert np.abs(res - true_res) < 10**-2, "Error in CUDAMatrix.vdot exceeded threshold" - -def test_subtract_dot(): - m = 128 - k = 256 - n = 64 - a = np.array(np.random.randn(m, k)*10, dtype=np.float64, order='F') - b = np.array(np.random.randn(k, n)*10, dtype=np.float64, order='F') - c = np.array(np.random.randn(m, n)*10, dtype=np.float64, order='F') - - res = c - np.dot(a, b) - - m1 = cm.CUDAMatrix(a) - m2 = cm.CUDAMatrix(b) - m3 = cm.CUDAMatrix(c) - m3.subtract_dot(m1, m2) - - m3.copy_to_host() - - assert np.max(np.abs(res - m3.numpy_array)) < 10**-2, "Error in CUDAMatrix.subtract_dot exceeded threshold" - -def test_random(): - cm.CUDAMatrix.init_random(1) - m1 = cm.CUDAMatrix(np.array(np.empty((128,256)), dtype=np.float64, order='F')) - m2 = cm.CUDAMatrix(np.array(np.empty((128,256)), dtype=np.float64, order='F')) - - m1.fill_with_rand() - m1.copy_to_host() - m2.fill_with_randn() - m2.copy_to_host() - - assert np.abs(np.mean(m1.numpy_array) - 0.5) < 10**-2, "Error in CUDAMatrix.fill_with_rand threshold" - assert np.abs(np.mean(m2.numpy_array)) < 10**-2, "Error in CUDAMatrix.fill_with_randn threshold" - -def test_euclid_norm(): - m = 256 - n = 128 - a = np.array(np.random.rand(m, n)*10, dtype=np.float64, order='F') - - m = cm.CUDAMatrix(a) - - n1 = np.sqrt(np.sum(a**2)) - n2 = m.euclid_norm() - - assert np.abs(n1-n2) < 10**-2, "Error in CUDAMatrix.euclid_norm exceeded threshold" - -def test_manhattan_norm(): - m = 256 - n = 128 - a = np.array(np.random.rand(m, n)*10, dtype=np.float64, order='F') - - m = cm.CUDAMatrix(a) - - n1 = np.sum(np.abs(a), dtype=np.double) - n2 = m.manhattan_norm() - - assert np.abs(n1-n2) < 2e-2, "Error in CUDAMatrix.manhattan_norm exceeded threshold (%f != %f)" % (n1, n2) - -def test_allfinite(): - a = cm.empty((10, 20)).assign(1).divide(0) # NaN - b = cm.empty((10, 20)).assign(1e20).mult(1e20) # Inf - c = cm.empty((10, 20)).assign(1) # 1.0 - - assert (not a.allfinite()) and (not b.allfinite()) and c.allfinite(), "CUDAMatrix.allfinite does not work" - -def test_select_columns(): - m = 256 - n = 128 - k = 8 - - s = np.array(np.random.randn(m, n), dtype=np.float64, order='F') - i_l = [0, 1, 2, 3, 5, 10, 12, 20] - i = np.array(i_l).T[np.newaxis, :] - t = np.empty((m, k)) - - s_d = cm.CUDAMatrix(s) - i_d = cm.CUDAMatrix(i) - t_d = cm.CUDAMatrix(t) - - s_d.select_columns(i_d, t_d) - res = s[:,i_l] - - assert np.max(np.abs(res - t_d.asarray())) < 10**-4, "Error in CUDAMatrix.select_columns exceeded threshold" - - -def test_where(): - m = 256 - n = 128 - a = np.array(np.random.randn(m, n)*10, dtype=np.float64, order='F') - z = np.zeros_like(a) - res = np.where(a > 0, a, z); - - a_d = cm.CUDAMatrix(a) - z_d = cm.CUDAMatrix(z) - res_d = cm.empty(a_d.shape) - a_d.greater_than(0, res_d) - cm.where(res_d, a_d, z_d) - assert np.abs(res-res_d.asarray()).max() < 1e-2, "Error in cudamat.where" - - -def test_correlate(): - m = 64 - n = 32 - km = 17 - kn = 11 - - a = np.array(np.random.randn(m, n)*10, dtype=np.float64, order='F') - k = np.array(np.random.randn(km, kn)*10, dtype=np.float64, order='F') - - res = np.zeros_like(a) - for i in range(len(a)): - for j in range(len(a[0])): - for h in range(-(km/2), km/2 + 1): - for w in range(-(kn/2), kn/2 + 1): - if i+h >= 0 and i+h < m and j+w >= 0 and j+w < n: - res[i][j] += a[i + h][j + w] * k[km/2 + h][kn/2 + w] - - a_d = cm.CUDAMatrix(a) - k_d = cm.CUDAMatrix(k) - - res_d = cm.correlate(a_d, k_d) - assert np.abs(res-res_d.asarray()).max() < 1e-2, "Error in cudamat.correlate" - - -if __name__ == '__main__': - nose.runmodule() |