summaryrefslogtreecommitdiff
path: root/test/matrix_test.cu
diff options
context:
space:
mode:
Diffstat (limited to 'test/matrix_test.cu')
-rw-r--r--test/matrix_test.cu152
1 files changed, 152 insertions, 0 deletions
diff --git a/test/matrix_test.cu b/test/matrix_test.cu
new file mode 100644
index 0000000..d64cb34
--- /dev/null
+++ b/test/matrix_test.cu
@@ -0,0 +1,152 @@
+//-*-c-*-
+
+#include "matrix.h"
+
+__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 minusmatrix(float *a, float *dest)
+{
+ matrix2array(-array2matrix(a), 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"