summaryrefslogtreecommitdiff
path: root/tests/linalg_test.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/linalg_test.py')
-rw-r--r--tests/linalg_test.py360
1 files changed, 152 insertions, 208 deletions
diff --git a/tests/linalg_test.py b/tests/linalg_test.py
index bc9720b..b490813 100644
--- a/tests/linalg_test.py
+++ b/tests/linalg_test.py
@@ -1,4 +1,3 @@
-import sys
import numpy as np
from pycuda import autoinit
from pycuda.compiler import SourceModule
@@ -13,219 +12,164 @@ source = open('../linalg.h').read() + open('linalg_test.cu').read()
mod = SourceModule(source, no_extern_c=True, arch='sm_13')
-add = mod.get_function('add')
-addequal = mod.get_function('addequal')
-sub = mod.get_function('sub')
-subequal = mod.get_function('subequal')
-addfloat = mod.get_function('addfloat')
-addfloatequal = mod.get_function('addfloatequal')
-subfloat = mod.get_function('subfloat')
-subfloatequal = mod.get_function('subfloatequal')
-mulfloat = mod.get_function('mulfloat')
-mulfloatequal = mod.get_function('mulfloatequal')
-divfloat = mod.get_function('divfloat')
-divfloatequal = mod.get_function('divfloatequal')
+float3add = mod.get_function('float3add')
+float3addequal = mod.get_function('float3addequal')
+float3sub = mod.get_function('float3sub')
+float3subequal = mod.get_function('float3subequal')
+float3addfloat = mod.get_function('float3addfloat')
+float3addfloatequal = mod.get_function('float3addfloatequal')
+floataddfloat3 = mod.get_function('floataddfloat3')
+float3subfloat = mod.get_function('float3subfloat')
+float3subfloatequal = mod.get_function('float3subfloatequal')
+floatsubfloat3 = mod.get_function('floatsubfloat3')
+float3mulfloat = mod.get_function('float3mulfloat')
+float3mulfloatequal = mod.get_function('float3mulfloatequal')
+floatmulfloat3 = mod.get_function('floatmulfloat3')
+float3divfloat = mod.get_function('float3divfloat')
+float3divfloatequal = mod.get_function('float3divfloatequal')
+floatdivfloat3 = mod.get_function('floatdivfloat3')
dot = mod.get_function('dot')
-size = {'block': (10,1,1), 'grid': (1,1)}
-
-for i in range(1):
- a = np.zeros(size['block'][0], dtype=float3)
- b = np.zeros(a.size, dtype=float3)
- dest = np.zeros(a.size, dtype=float3)
- c = np.float32(np.random.random_sample())
- destfloat = np.zeros(a.size, dtype=np.float32)
-
- a['x'] = np.random.random_sample(size=a.size)
- a['y'] = np.random.random_sample(size=a.size)
- a['z'] = np.random.random_sample(size=a.size)
-
- print a['x']
- print a['y']
- print a['z']
- print c
-
- print 'testing add...',
-
- add(cuda.In(a), cuda.In(b), cuda.Out(dest), **size)
-
- if (a['x'] + b['x'] != dest['x']).any() or \
- (a['y'] + b['y'] != dest['y']).any() or \
- (a['z'] + b['z'] != dest['z']).any():
- print 'fail'
- else:
- print 'success'
-
- print 'testing sub...',
-
- sub(cuda.In(a), cuda.In(b), cuda.Out(dest), **size)
-
- if (a['x'] - b['x'] != dest['x']).any() or \
- (a['y'] - b['y'] != dest['y']).any() or \
- (a['z'] - b['z'] != dest['z']).any():
- print 'fail'
- else:
- print 'success'
-
- print 'testing addfloat...',
-
- addfloat(cuda.In(a), c, cuda.Out(dest), **size)
-
- if (a['x'] + c != dest['x']).any() or \
- (a['y'] + c != dest['y']).any() or \
- (a['z'] + c != dest['z']).any():
- print 'fail'
- else:
- print 'success'
-
- print 'testing subfloat...',
-
- subfloat(cuda.In(a), c, cuda.Out(dest), **size)
-
- if (a['x'] - c != dest['x']).any() or \
- (a['y'] - c != dest['y']).any() or \
- (a['z'] - c != dest['z']).any():
- print 'fail'
- else:
- print 'success'
-
- print 'testing mulfloat...',
-
- mulfloat(cuda.In(a), c, cuda.Out(dest), **size)
-
- if (a['x']*c != dest['x']).any() or \
- (a['y']*c != dest['y']).any() or \
- (a['z']*c != dest['z']).any():
- print 'fail'
- else:
- print 'success'
-
- print 'testing divfloat...',
-
- divfloat(cuda.In(a), c, cuda.Out(dest), **size)
-
- if (a['x']/c != dest['x']).any() or \
- (a['y']/c != dest['y']).any() or \
- (a['z']/c != dest['z']).any():
- print 'fail'
- print a['x']/c
- print a['y']/c
- print a['z']/c
- print dest['x']
- print dest['y']
- print dest['z']
- else:
- print 'success'
-
- print 'testing dot...',
-
- dot(cuda.In(a), cuda.In(b), cuda.Out(destfloat), **size)
-
- if (a['x']*b['x'] + a['y']*b['y'] + a['z']*b['z'] != destfloat).any():
- print 'fail'
- else:
- print 'sucess'
-
- print 'testing addequal...',
-
+size = {'block': (100,1,1), 'grid': (1,1)}
+
+a = np.empty(size['block'][0], dtype=float3)
+b = np.empty(size['block'][0], dtype=float3)
+c = np.float32(np.random.random_sample())
+
+a['x'] = np.random.random_sample(size=a.size)
+a['y'] = np.random.random_sample(size=a.size)
+a['z'] = np.random.random_sample(size=a.size)
+
+def testfloat3add():
+ dest = np.empty(a.size, dtype=float3)
+ float3add(cuda.In(a), cuda.In(b), cuda.Out(dest), **size)
+ if not np.allclose(a['x']+b['x'], dest['x']) or \
+ not np.allclose(a['y']+b['y'], dest['y']) or \
+ not np.allclose(a['z']+b['z'], dest['z']):
+ assert False
+
+def testfloat3sub():
+ dest = np.empty(a.size, dtype=float3)
+ float3sub(cuda.In(a), cuda.In(b), cuda.Out(dest), **size)
+ if not np.allclose(a['x']-b['x'], dest['x']) or \
+ not np.allclose(a['y']-b['y'], dest['y']) or \
+ not np.allclose(a['z']-b['z'], dest['z']):
+ assert False
+
+def testfloat3addequal():
dest = np.copy(a)
+ float3addequal(cuda.InOut(dest), cuda.In(b), **size)
+ if not np.allclose(a['x']+b['x'], dest['x']) or \
+ not np.allclose(a['y']+b['y'], dest['y']) or \
+ not np.allclose(a['z']+b['z'], dest['z']):
+ assert False
- addequal(cuda.InOut(dest), cuda.In(b), **size)
-
- if (a['x'] + b['x'] != dest['x']).any() or \
- (a['y'] + b['y'] != dest['y']).any() or \
- (a['z'] + b['z'] != dest['z']).any():
- print 'fail'
- else:
- print 'success'
-
- print 'testing subequal...',
-
+def testfloat3subequal():
dest = np.copy(a)
-
- subequal(cuda.InOut(dest), cuda.In(b), **size)
-
- if (a['x'] - b['x'] != dest['x']).any() or \
- (a['y'] - b['y'] != dest['y']).any() or \
- (a['z'] - b['z'] != dest['z']).any():
- print 'fail'
- else:
- print 'success'
-
- print 'testing addfloatequal...',
-
+ float3subequal(cuda.InOut(dest), cuda.In(b), **size)
+ if not np.allclose(a['x']-b['x'], dest['x']) or \
+ not np.allclose(a['y']-b['y'], dest['y']) or \
+ not np.allclose(a['z']-b['z'], dest['z']):
+ assert False
+
+def testfloat3addfloat():
+ dest = np.empty(a.size, dtype=float3)
+ float3addfloat(cuda.In(a), c, cuda.Out(dest), **size)
+ if not np.allclose(a['x']+c, dest['x']) or \
+ not np.allclose(a['y']+c, dest['y']) or \
+ not np.allclose(a['z']+c, dest['z']):
+ assert False
+
+def testfloat3addfloatequal():
dest = np.copy(a)
-
- addfloatequal(cuda.InOut(dest), c, **size)
-
- if (a['x'] + c != dest['x']).any() or \
- (a['y'] + c != dest['y']).any() or \
- (a['z'] + c != dest['z']).any():
- print 'fail'
- print a['x'] + c
- print a['y'] + c
- print a['z'] + c
- print dest['x']
- print dest['y']
- print dest['z']
- else:
- print 'success'
-
- print 'testing subfloatequal...',
-
+ float3addfloatequal(cuda.InOut(dest), c, **size)
+ if not np.allclose(a['x']+c, dest['x']) or \
+ not np.allclose(a['y']+c, dest['y']) or \
+ not np.allclose(a['z']+c, dest['z']):
+ assert False
+
+def testfloataddfloat3():
+ dest = np.empty(a.size, dtype=float3)
+ floataddfloat3(cuda.In(a), c, cuda.Out(dest), **size)
+ if not np.allclose(c+a['x'], dest['x']) or \
+ not np.allclose(c+a['y'], dest['y']) or \
+ not np.allclose(c+a['z'], dest['z']):
+ assert False
+
+def testfloat3subfloat():
+ dest = np.empty(a.size, dtype=float3)
+ float3subfloat(cuda.In(a), c, cuda.Out(dest), **size)
+ if not np.allclose(a['x']-c, dest['x']) or \
+ not np.allclose(a['y']-c, dest['y']) or \
+ not np.allclose(a['z']-c, dest['z']):
+ assert False
+
+def testfloat3subfloatequal():
dest = np.copy(a)
-
- subfloatequal(cuda.InOut(dest), c, **size)
-
- if (a['x'] - c != dest['x']).any() or \
- (a['y'] - c != dest['y']).any() or \
- (a['z'] - c != dest['z']).any():
- print 'fail'
- print a['x'] - c
- print a['y'] - c
- print a['z'] - c
- print dest['x']
- print dest['y']
- print dest['z']
- else:
- print 'success'
-
- print 'testing mulfloatequal...',
-
+ float3subfloatequal(cuda.InOut(dest), c, **size)
+ if not np.allclose(a['x']-c, dest['x']) or \
+ not np.allclose(a['y']-c, dest['y']) or \
+ not np.allclose(a['z']-c, dest['z']):
+ assert False
+
+def testfloatsubfloat3():
+ dest = np.empty(a.size, dtype=float3)
+ floatsubfloat3(cuda.In(a), c, cuda.Out(dest), **size)
+ if not np.allclose(c-a['x'], dest['x']) or \
+ not np.allclose(c-a['y'], dest['y']) or \
+ not np.allclose(c-a['z'], dest['z']):
+ assert False
+
+def testfloat3mulfloat():
+ dest = np.empty(a.size, dtype=float3)
+ float3mulfloat(cuda.In(a), c, cuda.Out(dest), **size)
+ if not np.allclose(a['x']*c, dest['x']) or \
+ not np.allclose(a['y']*c, dest['y']) or \
+ not np.allclose(a['z']*c, dest['z']):
+ assert False
+
+def testfloat3mulfloatequal():
dest = np.copy(a)
-
- mulfloatequal(cuda.InOut(dest), c, **size)
-
- if (a['x']*c != dest['x']).any() or \
- (a['y']*c != dest['y']).any() or \
- (a['z']*c != dest['z']).any():
- print 'fail'
- print a['x']*c
- print a['y']*c
- print a['z']*c
- print dest['x']
- print dest['y']
- print dest['z']
- else:
- print 'success'
-
- print 'testing divfloatequal...',
-
+ float3mulfloatequal(cuda.InOut(dest), c, **size)
+ if not np.allclose(a['x']*c, dest['x']) or \
+ not np.allclose(a['y']*c, dest['y']) or \
+ not np.allclose(a['z']*c, dest['z']):
+ assert False
+
+def testfloatmulfloat3():
+ dest = np.empty(a.size, dtype=float3)
+ floatmulfloat3(cuda.In(a), c, cuda.Out(dest), **size)
+ if not np.allclose(c*a['x'], dest['x']) or \
+ not np.allclose(c*a['y'], dest['y']) or \
+ not np.allclose(c*a['z'], dest['z']):
+ assert False
+
+def testfloat3divfloat():
+ dest = np.empty(a.size, dtype=float3)
+ float3divfloat(cuda.In(a), c, cuda.Out(dest), **size)
+ if not np.allclose(a['x']/c, dest['x']) or \
+ not np.allclose(a['y']/c, dest['y']) or \
+ not np.allclose(a['z']/c, dest['z']):
+ assert False
+
+def testfloat3divfloatequal():
dest = np.copy(a)
-
- divfloatequal(cuda.InOut(dest), c, **size)
-
- if (a['x']/c != dest['x']).any() or \
- (a['y']/c != dest['y']).any() or \
- (a['z']/c != dest['z']).any():
- print 'fail'
- print a['x']/c
- print a['y']/c
- print a['z']/c
- print dest['x']
- print dest['y']
- print dest['z']
- else:
- print 'success'
-
-
+ float3divfloatequal(cuda.InOut(dest), c, **size)
+ if not np.allclose(a['x']/c, dest['x']) or \
+ not np.allclose(a['y']/c, dest['y']) or \
+ not np.allclose(a['z']/c, dest['z']):
+ assert False
+
+def testfloatdivfloat3():
+ dest = np.empty(a.size, dtype=float3)
+ floatdivfloat3(cuda.In(a), c, cuda.Out(dest), **size)
+ if not np.allclose(c/a['x'], dest['x']) or \
+ not np.allclose(c/a['y'], dest['y']) or \
+ not np.allclose(c/a['z'], dest['z']):
+ assert false
+
+def testdot():
+ dest = np.empty(a.size, dtype=np.float32)
+ dot(cuda.In(a), cuda.In(b), cuda.Out(dest), **size)
+ if not np.allclose(a['x']*b['x'] + a['y']*b['y'] + a['z']*b['z'], dest):
+ assert False