summaryrefslogtreecommitdiff
path: root/tests/matrix_test.cu
diff options
context:
space:
mode:
authorAnthony LaTorre <telatorre@gmail.com>2011-05-05 22:36:08 -0400
committerAnthony LaTorre <telatorre@gmail.com>2011-05-05 22:36:08 -0400
commit98dc8b3d4eb46fdb73b01e78c5e53ff3a779ab85 (patch)
tree099e4322dee2531dca77319b7f7f12c7244aee07 /tests/matrix_test.cu
parent7a4c43ed53fe0f6a61484be3e082a1d21dbd2ece (diff)
downloadchroma-98dc8b3d4eb46fdb73b01e78c5e53ff3a779ab85.tar.gz
chroma-98dc8b3d4eb46fdb73b01e78c5e53ff3a779ab85.tar.bz2
chroma-98dc8b3d4eb46fdb73b01e78c5e53ff3a779ab85.zip
added matrix struct and operations; added matrix tests; switched linear algebra operation tests to use nosetests
Diffstat (limited to 'tests/matrix_test.cu')
-rw-r--r--tests/matrix_test.cu145
1 files changed, 145 insertions, 0 deletions
diff --git a/tests/matrix_test.cu b/tests/matrix_test.cu
new file mode 100644
index 0000000..5c88a92
--- /dev/null
+++ b/tests/matrix_test.cu
@@ -0,0 +1,145 @@
+//-*-c-*-
+
+__device__ Matrix array2matrix(float *a)
+{
+ return make_matrix(a[0], a[1], a[2],
+ a[3], a[4], a[5],
+ a[6], a[7], a[8]);
+}
+
+__device__ void matrix2array(const Matrix &m, float *a)
+{
+ a[0] = m.a00;
+ a[1] = m.a01;
+ a[2] = m.a02;
+ a[3] = m.a10;
+ a[4] = m.a11;
+ a[5] = m.a12;
+ a[6] = m.a20;
+ a[7] = m.a21;
+ a[8] = m.a22;
+}
+
+extern "C"
+{
+
+__global__ void det(float *a, float *dest)
+{
+ Matrix m = array2matrix(a);
+ dest[0] = det(m);
+}
+
+__global__ void inv(float *a, float *dest)
+{
+ Matrix m = array2matrix(a);
+ matrix2array(inv(m), dest);
+}
+
+__global__ void matrixadd(float *a, float *b, float *dest)
+{
+ matrix2array(array2matrix(a)+array2matrix(b), dest);
+}
+
+__global__ void matrixsub(float *a, float *b, float *dest)
+{
+ matrix2array(array2matrix(a)-array2matrix(b), dest);
+}
+
+__global__ void matrixmul(float *a, float *b, float *dest)
+{
+ matrix2array(array2matrix(a)*array2matrix(b), dest);
+}
+
+__global__ void multiply(float *a, float3 *x, float3 *dest)
+{
+ dest[0] = array2matrix(a)*x[0];
+}
+
+__global__ void matrixaddfloat(float *a, float c, float *dest)
+{
+ matrix2array(array2matrix(a)+c, dest);
+}
+
+__global__ void matrixsubfloat(float *a, float c, float *dest)
+{
+ matrix2array(array2matrix(a)-c, dest);
+}
+
+__global__ void matrixmulfloat(float *a, float c, float *dest)
+{
+ matrix2array(array2matrix(a)*c, dest);
+}
+
+__global__ void matrixdivfloat(float *a, float c, float *dest)
+{
+ matrix2array(array2matrix(a)/c, dest);
+}
+
+__global__ void floataddmatrix(float *a, float c, float *dest)
+{
+ matrix2array(c+array2matrix(a), dest);
+}
+
+__global__ void floatsubmatrix(float *a, float c, float *dest)
+{
+ matrix2array(c-array2matrix(a), dest);
+}
+
+__global__ void floatmulmatrix(float *a, float c, float *dest)
+{
+ matrix2array(c*array2matrix(a), dest);
+}
+
+__global__ void floatdivmatrix(float *a, float c, float *dest)
+{
+ matrix2array(c/array2matrix(a), dest);
+}
+
+__global__ void matrixaddequals(float *a, float *b)
+{
+ Matrix m = array2matrix(a);
+ m += array2matrix(b);
+ matrix2array(m,a);
+}
+
+__global__ void matrixsubequals(float *a, float *b)
+{
+ Matrix m = array2matrix(a);
+ m -= array2matrix(b);
+ matrix2array(m,a);
+}
+
+__global__ void matrixaddequalsfloat(float *a, float c)
+{
+ Matrix m = array2matrix(a);
+ m += c;
+ matrix2array(m,a);
+}
+
+__global__ void matrixsubequalsfloat(float *a, float c)
+{
+ Matrix m = array2matrix(a);
+ m -= c;
+ matrix2array(m,a);
+}
+
+__global__ void matrixmulequalsfloat(float *a, float c)
+{
+ Matrix m = array2matrix(a);
+ m *= c;
+ matrix2array(m,a);
+}
+
+__global__ void matrixdivequalsfloat(float *a, float c)
+{
+ Matrix m = array2matrix(a);
+ m /= c;
+ matrix2array(m,a);
+}
+
+__global__ void outer(float3 a, float3 b, float* dest)
+{
+ matrix2array(outer(a,b), dest);
+}
+
+} // extern "c"