diff options
author | tomhudson@google.com <tomhudson@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2011-06-03 20:32:58 +0000 |
---|---|---|
committer | tomhudson@google.com <tomhudson@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2011-06-03 20:32:58 +0000 |
commit | a20416b010068df452fbfb1d2ccec9c855ae3dcc (patch) | |
tree | ac536ad9c4952f3e2fe9c4dcf7ca03f2fb2a85c2 /bench | |
parent | 76d613980dd15c09be76b0d7fe92f1ba0c59e1ad (diff) |
Remove warnings, improve benchmark quality, complicate benchmark results:
- data on heap instead of stack
- more closely match operations of actual SkMatrix::setConcat()
- avoid random perturbations, do_always;
use perf annotate to verify that assembly isn't getting optimized away
git-svn-id: http://skia.googlecode.com/svn/trunk@1500 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'bench')
-rw-r--r-- | bench/MatrixBench.cpp | 54 |
1 files changed, 30 insertions, 24 deletions
diff --git a/bench/MatrixBench.cpp b/bench/MatrixBench.cpp index 72dfe8b7a7..783bf51940 100644 --- a/bench/MatrixBench.cpp +++ b/bench/MatrixBench.cpp @@ -96,22 +96,24 @@ protected: *result = a * b + c * d; } virtual void performTest() { - float a[9]; - float b[9]; - float r[9]; - a[0] = rnd.nextS(); - a[3] = rnd.nextS(); + const float* a = mya; + const float* b = myb; + float* r = myr; muladdmul(a[0], b[0], a[1], b[3], &r[0]); muladdmul(a[0], b[1], a[1], b[4], &r[1]); muladdmul(a[0], b[2], a[1], b[5], &r[2]); + r[2] += a[2]; muladdmul(a[3], b[0], a[4], b[3], &r[3]); muladdmul(a[3], b[1], a[4], b[4], &r[4]); muladdmul(a[3], b[2], a[4], b[5], &r[5]); - always_do(r[0] + r[1] + r[2] + r[3] + r[4] + r[5] + - r[6] + r[7] + r[8] > 0.0f); + r[5] += a[5]; + r[6] = r[7] = 0.0f; + r[8] = 1.0f; } private: - SkRandom rnd; + float mya [9]; + float myb [9]; + float myr [9]; typedef MatrixBench INHERITED; }; @@ -133,22 +135,24 @@ protected: *result = SkDoubleToFloat((double)a * b + (double)c * d); } virtual void performTest() { - float a[9]; - float b[9]; - float r[9]; - a[0] = rnd.nextS(); - a[3] = rnd.nextS(); + const float* a = mya; + const float* b = myb; + float* r = myr; muladdmul(a[0], b[0], a[1], b[3], &r[0]); muladdmul(a[0], b[1], a[1], b[4], &r[1]); muladdmul(a[0], b[2], a[1], b[5], &r[2]); + r[2] += a[2]; muladdmul(a[3], b[0], a[4], b[3], &r[3]); muladdmul(a[3], b[1], a[4], b[4], &r[4]); muladdmul(a[3], b[2], a[4], b[5], &r[5]); - always_do(r[0] + r[1] + r[2] + r[3] + r[4] + r[5] + - r[6] + r[7] + r[8] > 0.0f); + r[5] += a[5]; + r[6] = r[7] = 0.0f; + r[8] = 1.0f; } private: - SkRandom rnd; + float mya [9]; + float myb [9]; + float myr [9]; typedef MatrixBench INHERITED; }; @@ -165,22 +169,24 @@ protected: *result = a * b + c * d; } virtual void performTest() { - double a[9]; - double b[9]; - double r[9]; - a[0] = rnd.nextS(); - a[3] = rnd.nextS(); + const double* a = mya; + const double* b = myb; + double* r = myr; muladdmul(a[0], b[0], a[1], b[3], &r[0]); muladdmul(a[0], b[1], a[1], b[4], &r[1]); muladdmul(a[0], b[2], a[1], b[5], &r[2]); + r[2] += a[2]; muladdmul(a[3], b[0], a[4], b[3], &r[3]); muladdmul(a[3], b[1], a[4], b[4], &r[4]); muladdmul(a[3], b[2], a[4], b[5], &r[5]); - always_do(r[0] + r[1] + r[2] + r[3] + r[4] + r[5] + - r[6] + r[7] + r[8] > 0.0f); + r[5] += a[5]; + r[6] = r[7] = 0.0; + r[8] = 1.0; } private: - SkRandom rnd; + double mya [9]; + double myb [9]; + double myr [9]; typedef MatrixBench INHERITED; }; |