#include #include #include #include #include #include #include #include #include int SST_Math_Mat44f_test_fxns() { const int NTESTS = 10; int i; uint64_t t0,t1; SST_Mat44f X; /* 4 x 4 matrix */ SST_Mat44f Y; /* 4 x 4 matrix */ SST_Mat44f A; /* 4 x 4 matrix */ SST_Mat44f B; /* 4 x 4 matrix */ SST_Vec4f v; /* 4 vector */ SST_Vec4f w; /* 4 vector */ for(i = 0; i < NTESTS; i++) { t0 = rdtsc(); t1 = rdtsc(); fprintf(stdout," timing:%llu\n",(long long unsigned int)(t1-t0)); } fprintf(stdout," timing:%llu\n",(long long unsigned int)(t1-t0)); /* Resetting test vectors / mats */ v.v[0] = 8.000000f; v.v[1] = -5.000000f; v.v[2] = 18.000000f; v.v[3] = -10.000000f; X.v[0] = -12.000000f; X.v[1] = -15.000000f; X.v[2] = 4.000000f; X.v[3] = -15.000000f; X.v[4] = -8.000000f; X.v[5] = -19.000000f; X.v[6] = 18.000000f; X.v[7] = 13.000000f; X.v[8] = 0.000000f; X.v[9] = -16.000000f; X.v[10] = 5.000000f; X.v[11] = 19.000000f; X.v[12] = -18.000000f; X.v[13] = -15.000000f; X.v[14] = -11.000000f; X.v[15] = 14.000000f; Y.v[0] = 18.000000f; Y.v[1] = -20.000000f; Y.v[2] = 6.000000f; Y.v[3] = 18.000000f; Y.v[4] = -1.000000f; Y.v[5] = 7.000000f; Y.v[6] = 12.000000f; Y.v[7] = -7.000000f; Y.v[8] = -4.000000f; Y.v[9] = -2.000000f; Y.v[10] = 6.000000f; Y.v[11] = -17.000000f; Y.v[12] = 8.000000f; Y.v[13] = -5.000000f; Y.v[14] = -1.000000f; Y.v[15] = 14.000000f; SST_Math_Mat44fAdd(&X,&Y,&A); /* clear out the initial finding of object */ /* Clear out the rdtsc register */ fprintf(stdout,"SST_Math_Mat44fAdd(X,Y,A)"); for(i = 0; i < NTESTS; i++) { t0 = rdtsc(); SST_Math_Mat44fAdd(&X,&Y,&A); t1 = rdtsc(); fprintf(stdout," timing:%llu\n",(long long unsigned int)(t1-t0)); } /* [[-12. -8. 0. -18.] [-15. -19. -16. -15.] [ 4. 18. 5. -11.] [-15. 13. 19. 14.]] [[ 18. -1. -4. 8.] [-20. 7. -2. -5.] [ 6. 12. 6. -1.] [ 18. -7. -17. 14.]] [[ 6. -9. -4. -10.] [-35. -12. -18. -20.] [ 10. 30. 11. -12.] [ 3. 6. 2. 28.]] */ assert(fabsf((A.v[0])-(6.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[4])-(-9.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[8])-(-4.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[12])-(-10.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[1])-(-35.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[5])-(-12.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[9])-(-18.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[13])-(-20.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[2])-(10.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[6])-(30.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[10])-(11.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[14])-(-12.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[3])-(3.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[7])-(6.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[11])-(2.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[15])-(28.000000f)) <=100*FLT_EPSILON /* yes this is bad */); /* [[-12. -8. 0. -18.] [-15. -19. -16. -15.] [ 4. 18. 5. -11.] [-15. 13. 19. 14.]] [[ 18. -1. -4. 8.] [-20. 7. -2. -5.] [ 6. 12. 6. -1.] [ 18. -7. -17. 14.]] [[ 6. -9. -4. -10.] [-35. -12. -18. -20.] [ 10. 30. 11. -12.] [ 3. 6. 2. 28.]] */ fprintf(stdout,"SST_Math_Mat44fAddLocal(A,Y)"); for(i = 0; i < NTESTS; i++) { t0 = rdtsc(); SST_Math_Mat44fAddLocal(&A,&Y); t1 = rdtsc(); fprintf(stdout," timing:%llu\n",(long long unsigned int)(t1-t0)); } fprintf(stdout," timing:%llu\n",(long long unsigned int)(t1-t0)); SST_Math_Mat44fAddLocal(&X,&Y); /* for accuracy */ assert(fabsf((X.v[0])-(6.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[4])-(-9.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[8])-(-4.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[12])-(-10.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[1])-(-35.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[5])-(-12.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[9])-(-18.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[13])-(-20.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[2])-(10.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[6])-(30.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[10])-(11.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[14])-(-12.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[3])-(3.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[7])-(6.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[11])-(2.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[15])-(28.000000f)) <=100*FLT_EPSILON /* yes this is bad */); /* Resetting test vectors / mats */ v.v[0] = 13.000000f; v.v[1] = 0.000000f; v.v[2] = -12.000000f; v.v[3] = -6.000000f; X.v[0] = 14.000000f; X.v[1] = 4.000000f; X.v[2] = 6.000000f; X.v[3] = -13.000000f; X.v[4] = 13.000000f; X.v[5] = -3.000000f; X.v[6] = 19.000000f; X.v[7] = -3.000000f; X.v[8] = 10.000000f; X.v[9] = 17.000000f; X.v[10] = -7.000000f; X.v[11] = -8.000000f; X.v[12] = -10.000000f; X.v[13] = 13.000000f; X.v[14] = 13.000000f; X.v[15] = -9.000000f; Y.v[0] = -16.000000f; Y.v[1] = -5.000000f; Y.v[2] = 11.000000f; Y.v[3] = -8.000000f; Y.v[4] = -3.000000f; Y.v[5] = -8.000000f; Y.v[6] = 4.000000f; Y.v[7] = -10.000000f; Y.v[8] = 14.000000f; Y.v[9] = -19.000000f; Y.v[10] = -4.000000f; Y.v[11] = 11.000000f; Y.v[12] = -9.000000f; Y.v[13] = -8.000000f; Y.v[14] = -12.000000f; Y.v[15] = -11.000000f; /* [[ 14. 13. 10. -10.] [ 4. -3. 17. 13.] [ 6. 19. -7. 13.] [-13. -3. -8. -9.]] [[ 28. 26. 20. -20.] [ 8. -6. 34. 26.] [ 12. 38. -14. 26.] [-26. -6. -16. -18.]] */ fprintf(stdout,"SST_Math_Mat44fMultiplyScalar(X,t,Y)"); for(i = 0; i < NTESTS; i++) { t0 = rdtsc(); SST_Math_Mat44fMultiplyScalar(&X,2.000000f,&A); t1 = rdtsc(); fprintf(stdout," timing:%llu\n",(long long unsigned int)(t1-t0)); } fprintf(stdout," timing:%llu\n",(long long unsigned int)(t1-t0)); assert(fabsf((A.v[0])-(28.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[4])-(26.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[8])-(20.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[12])-(-20.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[1])-(8.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[5])-(-6.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[9])-(34.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[13])-(26.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[2])-(12.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[6])-(38.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[10])-(-14.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[14])-(26.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[3])-(-26.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[7])-(-6.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[11])-(-16.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[15])-(-18.000000f)) <=100*FLT_EPSILON /* yes this is bad */); /* [[ 14. 13. 10. -10.] [ 4. -3. 17. 13.] [ 6. 19. -7. 13.] [-13. -3. -8. -9.]] [[ 28. 26. 20. -20.] [ 8. -6. 34. 26.] [ 12. 38. -14. 26.] [-26. -6. -16. -18.]] */ fprintf(stdout,"SST_Math_Mat44fMultiplyScalarLocal(A,t)"); for(i = 0; i < NTESTS; i++) { t0 = rdtsc(); SST_Math_Mat44fMultiplyScalarLocal(&A,2.000000f); t1 = rdtsc(); fprintf(stdout," timing:%llu\n",(long long unsigned int)(t1-t0)); } fprintf(stdout," timing:%llu\n",(long long unsigned int)(t1-t0)); SST_Math_Mat44fMultiplyScalarLocal(&X,2.000000f); assert(fabsf((X.v[0])-(28.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[4])-(26.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[8])-(20.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[12])-(-20.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[1])-(8.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[5])-(-6.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[9])-(34.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[13])-(26.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[2])-(12.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[6])-(38.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[10])-(-14.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[14])-(26.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[3])-(-26.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[7])-(-6.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[11])-(-16.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[15])-(-18.000000f)) <=100*FLT_EPSILON /* yes this is bad */); /* Resetting test vectors / mats */ v.v[0] = 0.000000f; v.v[1] = -12.000000f; v.v[2] = -11.000000f; v.v[3] = 4.000000f; X.v[0] = -20.000000f; X.v[1] = 12.000000f; X.v[2] = -12.000000f; X.v[3] = 12.000000f; X.v[4] = 7.000000f; X.v[5] = -10.000000f; X.v[6] = 17.000000f; X.v[7] = -5.000000f; X.v[8] = -6.000000f; X.v[9] = 19.000000f; X.v[10] = 19.000000f; X.v[11] = -18.000000f; X.v[12] = 7.000000f; X.v[13] = -10.000000f; X.v[14] = -18.000000f; X.v[15] = -11.000000f; Y.v[0] = 10.000000f; Y.v[1] = 10.000000f; Y.v[2] = 14.000000f; Y.v[3] = 2.000000f; Y.v[4] = -13.000000f; Y.v[5] = 17.000000f; Y.v[6] = -14.000000f; Y.v[7] = 4.000000f; Y.v[8] = 9.000000f; Y.v[9] = 19.000000f; Y.v[10] = 17.000000f; Y.v[11] = 5.000000f; Y.v[12] = -17.000000f; Y.v[13] = -5.000000f; Y.v[14] = 13.000000f; Y.v[15] = 4.000000f; /* [[-20. 7. -6. 7.] [ 12. -10. 19. -10.] [-12. 17. 19. -18.] [ 12. -5. -18. -11.]] [[ 10. -13. 9. -17.] [ 10. 17. 19. -5.] [ 14. -14. 17. 13.] [ 2. 4. 5. 4.]] [[-200. -91. -54. -119.] [ 120. -170. 361. 50.] [-168. -238. 323. -234.] [ 24. -20. -90. -44.]] */ fprintf(stdout,"SST_Math_Mat44fMultiplyElementwise(X,Y,A)"); for(i = 0; i < NTESTS; i++) { t0 = rdtsc(); SST_Math_Mat44fMultiplyElementwise(&X, &Y, &A); t1 = rdtsc(); fprintf(stdout," timing:%llu\n",(long long unsigned int)(t1-t0)); } fprintf(stdout," timing:%llu\n",(long long unsigned int)(t1-t0)); assert(fabsf((A.v[0])-(-200.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[4])-(-91.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[8])-(-54.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[12])-(-119.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[1])-(120.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[5])-(-170.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[9])-(361.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[13])-(50.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[2])-(-168.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[6])-(-238.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[10])-(323.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[14])-(-234.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[3])-(24.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[7])-(-20.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[11])-(-90.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[15])-(-44.000000f)) <=100*FLT_EPSILON /* yes this is bad */); /* [[-20. 7. -6. 7.] [ 12. -10. 19. -10.] [-12. 17. 19. -18.] [ 12. -5. -18. -11.]] [[ 10. -13. 9. -17.] [ 10. 17. 19. -5.] [ 14. -14. 17. 13.] [ 2. 4. 5. 4.]] [[-200. -91. -54. -119.] [ 120. -170. 361. 50.] [-168. -238. 323. -234.] [ 24. -20. -90. -44.]] */ fprintf(stdout,"SST_Math_Mat44fMultiplyElementwiseLocal(X,Y)"); for(i = 0; i < NTESTS; i++) { t0 = rdtsc(); SST_Math_Mat44fMultiplyElementwiseLocal(&A,&Y); t1 = rdtsc(); fprintf(stdout," timing:%llu\n",(long long unsigned int)(t1-t0)); } fprintf(stdout," timing:%llu\n",(long long unsigned int)(t1-t0)); SST_Math_Mat44fMultiplyElementwiseLocal(&X,&Y); assert(fabsf((X.v[0])-(-200.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[4])-(-91.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[8])-(-54.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[12])-(-119.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[1])-(120.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[5])-(-170.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[9])-(361.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[13])-(50.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[2])-(-168.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[6])-(-238.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[10])-(323.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[14])-(-234.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[3])-(24.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[7])-(-20.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[11])-(-90.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[15])-(-44.000000f)) <=100*FLT_EPSILON /* yes this is bad */); /* Resetting test vectors / mats */ v.v[0] = -13.000000f; v.v[1] = -12.000000f; v.v[2] = -20.000000f; v.v[3] = 8.000000f; X.v[0] = 2.000000f; X.v[1] = 11.000000f; X.v[2] = 4.000000f; X.v[3] = -2.000000f; X.v[4] = 10.000000f; X.v[5] = 6.000000f; X.v[6] = -6.000000f; X.v[7] = -17.000000f; X.v[8] = -1.000000f; X.v[9] = 3.000000f; X.v[10] = 9.000000f; X.v[11] = 8.000000f; X.v[12] = -4.000000f; X.v[13] = -3.000000f; X.v[14] = -10.000000f; X.v[15] = 18.000000f; Y.v[0] = 12.000000f; Y.v[1] = -2.000000f; Y.v[2] = 5.000000f; Y.v[3] = -1.000000f; Y.v[4] = -12.000000f; Y.v[5] = 6.000000f; Y.v[6] = 2.000000f; Y.v[7] = -3.000000f; Y.v[8] = -13.000000f; Y.v[9] = 9.000000f; Y.v[10] = 5.000000f; Y.v[11] = 2.000000f; Y.v[12] = 16.000000f; Y.v[13] = -13.000000f; Y.v[14] = 14.000000f; Y.v[15] = -5.000000f; /* X [[ 2. 10. -1. -4.] [ 11. 6. 3. -3.] [ 4. -6. 9. -10.] [ -2. -17. 8. 18.]] Y [[ 12. -12. -13. 16.] [ -2. 6. 9. -13.] [ 5. 2. 5. 14.] [ -1. -3. 2. -5.]] [[ 3. 46. 51. -92.] [ 138. -81. -80. 155.] [ 115. -36. -81. 318.] [ 32. -116. -51. 211.]] */ fprintf(stdout,"SST_Math_Mat44fMultiplyMatrix(X,Y,A)"); for(i = 0; i < NTESTS; i++) { t0 = rdtsc(); SST_Math_Mat44fMultiplyMatrix(&X,&Y,&A); t1 = rdtsc(); } fprintf(stdout," timing:%llu\n",(long long unsigned int)(t1-t0)); assert(fabsf((A.v[0])-(3.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[4])-(46.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[8])-(51.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[12])-(-92.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[1])-(138.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[5])-(-81.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[9])-(-80.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[13])-(155.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[2])-(115.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[6])-(-36.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[10])-(-81.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[14])-(318.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[3])-(32.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[7])-(-116.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[11])-(-51.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[15])-(211.000000f)) <=100*FLT_EPSILON /* yes this is bad */); /* X [[ 2. 10. -1. -4.] [ 11. 6. 3. -3.] [ 4. -6. 9. -10.] [ -2. -17. 8. 18.]] Y [[ 12. -12. -13. 16.] [ -2. 6. 9. -13.] [ 5. 2. 5. 14.] [ -1. -3. 2. -5.]] X [[ 3. 46. 51. -92.] [ 138. -81. -80. 155.] [ 115. -36. -81. 318.] [ 32. -116. -51. 211.]] */ fprintf(stdout,"SST_Math_Mat44fMultiplyMatrixLocal(X,Y)"); for(i = 0; i < NTESTS; i++) { t0 = rdtsc(); SST_Math_Mat44fMultiplyMatrixLocal(&A,&Y); t1 = rdtsc(); } fprintf(stdout," timing:%llu\n",(long long unsigned int)(t1-t0)); SST_Math_Mat44fMultiplyMatrixLocal(&X,&Y); assert(fabsf((X.v[0])-(3.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[4])-(46.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[8])-(51.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[12])-(-92.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[1])-(138.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[5])-(-81.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[9])-(-80.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[13])-(155.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[2])-(115.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[6])-(-36.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[10])-(-81.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[14])-(318.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[3])-(32.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[7])-(-116.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[11])-(-51.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[15])-(211.000000f)) <=100*FLT_EPSILON /* yes this is bad */); /* Resetting test vectors / mats */ v.v[0] = -14.000000f; v.v[1] = -16.000000f; v.v[2] = 15.000000f; v.v[3] = -20.000000f; X.v[0] = -14.000000f; X.v[1] = -20.000000f; X.v[2] = 11.000000f; X.v[3] = 18.000000f; X.v[4] = -15.000000f; X.v[5] = 18.000000f; X.v[6] = -2.000000f; X.v[7] = -11.000000f; X.v[8] = -4.000000f; X.v[9] = 4.000000f; X.v[10] = -16.000000f; X.v[11] = -12.000000f; X.v[12] = 13.000000f; X.v[13] = 9.000000f; X.v[14] = -6.000000f; X.v[15] = 0.000000f; Y.v[0] = 3.000000f; Y.v[1] = -8.000000f; Y.v[2] = 16.000000f; Y.v[3] = -4.000000f; Y.v[4] = -15.000000f; Y.v[5] = 2.000000f; Y.v[6] = 13.000000f; Y.v[7] = 18.000000f; Y.v[8] = 7.000000f; Y.v[9] = -13.000000f; Y.v[10] = -6.000000f; Y.v[11] = 6.000000f; Y.v[12] = -19.000000f; Y.v[13] = -1.000000f; Y.v[14] = 1.000000f; Y.v[15] = 10.000000f; /* X [[-14. -15. -4. 13.] [-20. 18. 4. 9.] [ 11. -2. -16. -6.] [ 18. -11. -12. 0.]] v [-14. -16. 15. -20.] w [ 116. -128. -242. -256.] */ i=0; fprintf(stdout,"SST_Math_Mat44fMultiplyVector(X,v,w)"); for(i = 0; i < NTESTS; i++) { t0 = rdtsc(); SST_Math_Mat44fMultiplyVector(&X,&v,&w); t1 = rdtsc(); fprintf(stdout," timing:%llu\n",(long long unsigned int)(t1-t0)); } fprintf(stdout," timing:%llu\n",(long long unsigned int)(t1-t0)); assert(fabsf((w.v[0])-(116.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((w.v[1])-(-128.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((w.v[2])-(-242.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((w.v[3])-(-256.000000f)) <=100*FLT_EPSILON /* yes this is bad */); /* X [[-14. -15. -4. 13.] [-20. 18. 4. 9.] [ 11. -2. -16. -6.] [ 18. -11. -12. 0.]] v [-14. -16. 15. -20.] v [ 116. -128. -242. -256.] */ fprintf(stdout,"SST_Math_Mat44fMultiplyVectorLocal(X,v)"); for(i = 0; i < NTESTS; i++) { t0 = rdtsc(); SST_Math_Mat44fMultiplyVectorLocal(&X,&w); t1 = rdtsc(); fprintf(stdout," timing:%llu\n",(long long unsigned int)(t1-t0)); } fprintf(stdout," timing:%llu\n",(long long unsigned int)(t1-t0)); SST_Math_Mat44fMultiplyVectorLocal(&X,&v); assert(fabsf((v.v[0])-(116.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((v.v[1])-(-128.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((v.v[2])-(-242.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((v.v[3])-(-256.000000f)) <=100*FLT_EPSILON /* yes this is bad */); /* Resetting test vectors / mats */ v.v[0] = -8.000000f; v.v[1] = 10.000000f; v.v[2] = 4.000000f; v.v[3] = 5.000000f; X.v[0] = -4.000000f; X.v[1] = -6.000000f; X.v[2] = -18.000000f; X.v[3] = -15.000000f; X.v[4] = 14.000000f; X.v[5] = 13.000000f; X.v[6] = -15.000000f; X.v[7] = 11.000000f; X.v[8] = 14.000000f; X.v[9] = -2.000000f; X.v[10] = 0.000000f; X.v[11] = 10.000000f; X.v[12] = -1.000000f; X.v[13] = 4.000000f; X.v[14] = 9.000000f; X.v[15] = 6.000000f; Y.v[0] = 0.000000f; Y.v[1] = -8.000000f; Y.v[2] = -9.000000f; Y.v[3] = 2.000000f; Y.v[4] = 18.000000f; Y.v[5] = 16.000000f; Y.v[6] = 18.000000f; Y.v[7] = 9.000000f; Y.v[8] = 13.000000f; Y.v[9] = -6.000000f; Y.v[10] = 1.000000f; Y.v[11] = 15.000000f; Y.v[12] = 1.000000f; Y.v[13] = 4.000000f; Y.v[14] = 5.000000f; Y.v[15] = -14.000000f; fprintf(stdout,"SST_Math_Mat44fTranspose(X,A)"); t0 = rdtsc(); SST_Math_Mat44fTranspose(&X,&A); t1 = rdtsc(); fprintf(stdout," timing:%llu\n",(long long unsigned int)(t1-t0)); assert(fabsf((A.v[0])-(-4.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[4])-(-6.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[8])-(-18.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[12])-(-15.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[1])-(14.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[5])-(13.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[9])-(-15.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[13])-(11.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[2])-(14.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[6])-(-2.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[10])-(0.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[14])-(10.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[3])-(-1.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[7])-(4.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[11])-(9.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((A.v[15])-(6.000000f)) <=100*FLT_EPSILON /* yes this is bad */); fprintf(stdout,"SST_Math_Mat44fTransposeLocal(X)"); for(i = 0; i < NTESTS; i++) { t0 = rdtsc(); SST_Math_Mat44fTransposeLocal(&A); t1 = rdtsc(); fprintf(stdout," timing:%llu\n",(long long unsigned int)(t1-t0)); } fprintf(stdout," timing:%llu\n",(long long unsigned int)(t1-t0)); SST_Math_Mat44fTransposeLocal(&X); assert(fabsf((X.v[0])-(-4.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[4])-(-6.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[8])-(-18.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[12])-(-15.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[1])-(14.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[5])-(13.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[9])-(-15.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[13])-(11.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[2])-(14.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[6])-(-2.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[10])-(0.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[14])-(10.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[3])-(-1.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[7])-(4.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[11])-(9.000000f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[15])-(6.000000f)) <=100*FLT_EPSILON /* yes this is bad */); /* [[-0.16316341 -0.51831281 0.642591 -0.54019099] [-0.24474511 -0.47715011 -0.75842094 -0.37043935] [-0.73423529 0.59570372 0.02088371 -0.32496071] [-0.61186278 -0.38576764 0.10695031 0.68217951]] [[ 1.00000000e+00 0.00000000e+00 7.45058060e-09 0.00000000e+00] [ 0.00000000e+00 1.00000000e+00 7.45058060e-09 -2.98023224e-08] [ 7.45058060e-09 7.45058060e-09 1.00000000e+00 2.98023224e-08] [ 0.00000000e+00 -2.98023224e-08 2.98023224e-08 1.00000000e+00]] */ X.v[0] = (float)-0.163163f; X.v[4] = (float)-0.518313f; X.v[8] = (float)0.642591f; X.v[12] = (float)-0.540191f; X.v[1] = (float)-0.244745f; X.v[5] = (float)-0.477150f; X.v[9] = (float)-0.758421f; X.v[13] = (float)-0.370439f; X.v[2] = (float)-0.734235f; X.v[6] = (float)0.595704f; X.v[10] = (float)0.020884f; X.v[14] = (float)-0.324961f; X.v[3] = (float)-0.611863f; X.v[7] = (float)-0.385768f; X.v[11] = (float)0.106950f; X.v[15] = (float)0.682180f; fprintf(stdout,"SST_Math_Mat44fTranspose(X,A)"); t0 = rdtsc(); SST_Math_Mat44fTranspose(&X,&A); t1 = rdtsc(); fprintf(stdout," timing:%llu\n",(long long unsigned int)(t1-t0)); fprintf(stdout,"SST_Math_Mat44fMultiplyMatrix(A,X,B)"); t0 = rdtsc(); SST_Math_Mat44fMultiplyMatrix(&A,&X,&B); t1 = rdtsc(); fprintf(stdout," timing:%llu\n",(long long unsigned int)(t1-t0)); /* Check Negative Test */ assert(!SST_Math_Mat44fCheckOrthonormal(&X)); X.v[0] = (float)1.000000f; X.v[4] = (float)0.000000f; X.v[8] = (float)0.000000f; X.v[12] = (float)0.000000f; X.v[1] = (float)0.000000f; X.v[5] = (float)1.000000f; X.v[9] = (float)0.000000f; X.v[13] = (float)0.000000f; X.v[2] = (float)0.000000f; X.v[6] = (float)0.000000f; X.v[10] = (float)1.000000f; X.v[14] = (float)0.000000f; X.v[3] = (float)0.000000f; X.v[7] = (float)0.000000f; X.v[11] = (float)0.000000f; X.v[15] = (float)1.000000f; /* Check Positive Test */ assert(SST_Math_Mat44fCheckOrthonormal(&X)); /* Resetting test vectors / mats */ v.v[0] = 12.000000f; v.v[1] = 10.000000f; v.v[2] = 8.000000f; v.v[3] = -2.000000f; X.v[0] = -7.000000f; X.v[1] = -12.000000f; X.v[2] = -6.000000f; X.v[3] = -16.000000f; X.v[4] = -18.000000f; X.v[5] = 7.000000f; X.v[6] = -2.000000f; X.v[7] = 17.000000f; X.v[8] = 9.000000f; X.v[9] = 3.000000f; X.v[10] = -10.000000f; X.v[11] = -2.000000f; X.v[12] = -16.000000f; X.v[13] = -9.000000f; X.v[14] = -2.000000f; X.v[15] = 6.000000f; Y.v[0] = -7.000000f; Y.v[1] = 6.000000f; Y.v[2] = -15.000000f; Y.v[3] = 9.000000f; Y.v[4] = -17.000000f; Y.v[5] = -5.000000f; Y.v[6] = 15.000000f; Y.v[7] = -13.000000f; Y.v[8] = 1.000000f; Y.v[9] = -12.000000f; Y.v[10] = -5.000000f; Y.v[11] = -4.000000f; Y.v[12] = -10.000000f; Y.v[13] = -18.000000f; Y.v[14] = 13.000000f; Y.v[15] = -17.000000f; /* [[-0.04568416 0.04019328 -0.01570393 -0.06676916] [-0.050604 0.07529102 -0.01739512 -0.02780584] [ 0.0311443 -0.01682407 -0.08304415 0.03013398] [ 0.03193499 -0.11175049 -0.02027235 0.07744344]] */ fprintf(stdout,"SST_Math_Mat44fInvert(X,B)\n"); t0 = rdtsc(); SST_Math_Mat44fInvert(&X,&B); t1 = rdtsc(); fprintf(stdout," timing:%llu\n",(long long unsigned int)(t1-t0)); fprintf(stdout,"B[%d][%d] = %ff\n",0,0,B.v[0]); fprintf(stdout,"B[%d][%d] = %ff\n",0,1,B.v[1]); fprintf(stdout,"B[%d][%d] = %ff\n",0,2,B.v[2]); fprintf(stdout,"B[%d][%d] = %ff\n",0,3,B.v[3]); fprintf(stdout,"B[%d][%d] = %ff\n",1,0,B.v[4]); fprintf(stdout,"B[%d][%d] = %ff\n",1,1,B.v[5]); fprintf(stdout,"B[%d][%d] = %ff\n",1,2,B.v[6]); fprintf(stdout,"B[%d][%d] = %ff\n",1,3,B.v[7]); fprintf(stdout,"B[%d][%d] = %ff\n",2,0,B.v[8]); fprintf(stdout,"B[%d][%d] = %ff\n",2,1,B.v[9]); fprintf(stdout,"B[%d][%d] = %ff\n",2,2,B.v[10]); fprintf(stdout,"B[%d][%d] = %ff\n",2,3,B.v[11]); fprintf(stdout,"B[%d][%d] = %ff\n",3,0,B.v[12]); fprintf(stdout,"B[%d][%d] = %ff\n",3,1,B.v[13]); fprintf(stdout,"B[%d][%d] = %ff\n",3,2,B.v[14]); fprintf(stdout,"B[%d][%d] = %ff\n",3,3,B.v[15]); assert(fabsf((B.v[0])-(-0.045684f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((B.v[4])-(0.040193f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((B.v[8])-(-0.015704f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((B.v[12])-(-0.066769f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((B.v[1])-(-0.050604f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((B.v[5])-(0.075291f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((B.v[9])-(-0.017395f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((B.v[13])-(-0.027806f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((B.v[2])-(0.031144f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((B.v[6])-(-0.016824f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((B.v[10])-(-0.083044f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((B.v[14])-(0.030134f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((B.v[3])-(0.031935f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((B.v[7])-(-0.111750f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((B.v[11])-(-0.020272f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((B.v[15])-(0.077443f)) <=100*FLT_EPSILON /* yes this is bad */); /* Resetting test vectors / mats */ v.v[0] = -5.000000f; v.v[1] = 4.000000f; v.v[2] = -15.000000f; v.v[3] = 8.000000f; X.v[0] = -20.000000f; X.v[1] = -1.000000f; X.v[2] = -19.000000f; X.v[3] = 10.000000f; X.v[4] = 19.000000f; X.v[5] = -17.000000f; X.v[6] = 5.000000f; X.v[7] = 3.000000f; X.v[8] = -20.000000f; X.v[9] = 17.000000f; X.v[10] = -19.000000f; X.v[11] = -8.000000f; X.v[12] = -3.000000f; X.v[13] = 4.000000f; X.v[14] = 0.000000f; X.v[15] = 9.000000f; Y.v[0] = -3.000000f; Y.v[1] = -20.000000f; Y.v[2] = 8.000000f; Y.v[3] = 1.000000f; Y.v[4] = 3.000000f; Y.v[5] = 6.000000f; Y.v[6] = 9.000000f; Y.v[7] = -15.000000f; Y.v[8] = -19.000000f; Y.v[9] = -18.000000f; Y.v[10] = -16.000000f; Y.v[11] = 12.000000f; Y.v[12] = -14.000000f; Y.v[13] = 14.000000f; Y.v[14] = 2.000000f; Y.v[15] = 0.000000f; /* [[-0.04497354 -0.04884005 0.000814 0.00671551] [ 0.09047619 0.02087912 -0.08534799 0.02087912] [ 0.06878307 0.05433455 -0.07590558 -0.001221 ] [ 0.08095238 0.0956044 -0.03992674 0.0956044 ]] */ fprintf(stdout,"SST_Math_Mat44fInvert(X,B)\n"); fflush(stdout); fprintf(stdout,"SST_Math_Mat44fInvertLocal(X,B)\n"); t0 = rdtsc(); SST_Math_Mat44fInvertLocal(&X); t1 = rdtsc(); fprintf(stdout," timing:%llu\n",(long long unsigned int)(t1-t0)); fflush(stdout); assert(fabsf((X.v[0])-(-0.044974f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[4])-(-0.048840f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[8])-(0.000814f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[12])-(0.006716f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[1])-(0.090476f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[5])-(0.020879f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[9])-(-0.085348f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[13])-(0.020879f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[2])-(0.068783f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[6])-(0.054335f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[10])-(-0.075906f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[14])-(-0.001221f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[3])-(0.080952f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[7])-(0.095604f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[11])-(-0.039927f)) <=100*FLT_EPSILON /* yes this is bad */); assert(fabsf((X.v[15])-(0.095604f)) <=100*FLT_EPSILON /* yes this is bad */); fprintf(stdout,"\n==== SST_Math_Mat44ftest_fxn COMPLETE ====\n"); return 0; }