From 29104f23754cc57b05f9d61888c2f0299e1e4966 Mon Sep 17 00:00:00 2001 From: Colin Sherratt Date: Mon, 25 Nov 2013 23:23:06 -0500 Subject: [PATCH 1/4] Add a benchmarking suite for matrix. --- src/bench/bench.rs | 41 +++++ src/bench/matrix.rs | 422 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 463 insertions(+) create mode 100644 src/bench/bench.rs create mode 100644 src/bench/matrix.rs diff --git a/src/bench/bench.rs b/src/bench/bench.rs new file mode 100644 index 0000000..75506d3 --- /dev/null +++ b/src/bench/bench.rs @@ -0,0 +1,41 @@ +// Copyright 2013 The CGMath Developers. For a full listing of the authors, +// refer to the AUTHORS file at the top-level directory of this distribution. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +#[feature(globs)]; + +#[feature(globs)]; + +extern mod cgmath; +extern mod extra; + +// pub mod array; +pub mod matrix; +// pub mod quaternion; +//pub mod vector; + +//pub mod angle; +//pub mod plane; +//pub mod point; +// pub mod ray; +// pub mod rotation; +//pub mod transform; + +// pub mod projection; + +// pub mod aabb; +// pub mod cylinder; +// pub mod frustum; +// pub mod intersect; +// pub mod obb; +//pub mod sphere; diff --git a/src/bench/matrix.rs b/src/bench/matrix.rs new file mode 100644 index 0000000..165b78e --- /dev/null +++ b/src/bench/matrix.rs @@ -0,0 +1,422 @@ +// Copyright 2013 The CGMath Developers. For a full listing of the authors, +// refer to the AUTHORS file at the top-level directory of this distribution. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +use cgmath::matrix::*; +use cgmath::vector::*; + +use extra; + +type float = f32; + +pub mod mat2 { + use cgmath::matrix::*; + use cgmath::vector::*; + type float = f32; + + pub static A: Mat2 = Mat2 { x: Vec2 { x: 1.0, y: 3.0 }, + y: Vec2 { x: 2.0, y: 4.0 } }; + pub static B: Mat2 = Mat2 { x: Vec2 { x: 2.0, y: 4.0 }, + y: Vec2 { x: 3.0, y: 5.0 } }; + pub static C: Mat2 = Mat2 { x: Vec2 { x: 2.0, y: 1.0 }, + y: Vec2 { x: 1.0, y: 2.0 } }; + + pub static V: Vec2 = Vec2 { x: 1.0, y: 2.0 }; + pub static F: f32 = 0.5; +} + +pub mod mat3 { + use cgmath::matrix::*; + use cgmath::vector::*; + type float = f32; + + pub static A: Mat3 = Mat3 { x: Vec3 { x: 1.0, y: 4.0, z: 7.0 }, + y: Vec3 { x: 2.0, y: 5.0, z: 8.0 }, + z: Vec3 { x: 3.0, y: 6.0, z: 9.0 } }; + pub static B: Mat3 = Mat3 { x: Vec3 { x: 2.0, y: 5.0, z: 8.0 }, + y: Vec3 { x: 3.0, y: 6.0, z: 9.0 }, + z: Vec3 { x: 4.0, y: 7.0, z: 10.0 } }; + pub static C: Mat3 = Mat3 { x: Vec3 { x: 2.0, y: 4.0, z: 6.0 }, + y: Vec3 { x: 0.0, y: 2.0, z: 4.0 }, + z: Vec3 { x: 0.0, y: 0.0, z: 1.0 } }; + pub static D: Mat3 = Mat3 { x: Vec3 { x: 3.0, y: 2.0, z: 1.0 }, + y: Vec3 { x: 2.0, y: 3.0, z: 2.0 }, + z: Vec3 { x: 1.0, y: 2.0, z: 3.0 } }; + + pub static V: Vec3 = Vec3 { x: 1.0, y: 2.0, z: 3.0 }; + pub static F: f32 = 0.5; +} + +pub mod mat4 { + use cgmath::matrix::*; + use cgmath::vector::*; + type float = f32; + + pub static A: Mat4 = Mat4 { x: Vec4 { x: 1.0, y: 5.0, z: 9.0, w: 13.0 }, + y: Vec4 { x: 2.0, y: 6.0, z: 10.0, w: 14.0 }, + z: Vec4 { x: 3.0, y: 7.0, z: 11.0, w: 15.0 }, + w: Vec4 { x: 4.0, y: 8.0, z: 12.0, w: 16.0 } }; + pub static B: Mat4 = Mat4 { x: Vec4 { x: 2.0, y: 6.0, z: 10.0, w: 14.0 }, + y: Vec4 { x: 3.0, y: 7.0, z: 11.0, w: 15.0 }, + z: Vec4 { x: 4.0, y: 8.0, z: 12.0, w: 16.0 }, + w: Vec4 { x: 5.0, y: 9.0, z: 13.0, w: 17.0 } }; + pub static C: Mat4 = Mat4 { x: Vec4 { x: 3.0, y: 2.0, z: 1.0, w: 1.0 }, + y: Vec4 { x: 2.0, y: 3.0, z: 2.0, w: 2.0 }, + z: Vec4 { x: 1.0, y: 2.0, z: 3.0, w: 3.0 }, + w: Vec4 { x: 0.0, y: 1.0, z: 1.0, w: 0.0 } }; + pub static D: Mat4 = Mat4 { x: Vec4 { x: 4.0, y: 3.0, z: 2.0, w: 1.0 }, + y: Vec4 { x: 3.0, y: 4.0, z: 3.0, w: 2.0 }, + z: Vec4 { x: 2.0, y: 3.0, z: 4.0, w: 3.0 }, + w: Vec4 { x: 1.0, y: 2.0, z: 3.0, w: 4.0 } }; + + pub static V: Vec4 = Vec4 { x: 1.0, y: 2.0, z: 3.0, w: 4.0 }; + pub static F: f32 = 0.5; +} + +#[bench] +fn bench_mat2_mul_m(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat2::A.clone(); + do b.iter { + mat_a = mat_a.mul_m(&mat2::B); + } +} + +#[bench] +fn bench_mat3_mul_m(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat3::A.clone(); + do b.iter { + mat_a = mat_a.mul_m(&mat3::B); + } +} + +#[bench] +fn bench_mat4_mul_m(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat4::A.clone(); + do b.iter { + mat_a = mat_a.mul_m(&mat4::B); + } +} + +#[bench] +fn bench_mat2_add_m(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat2::A.clone(); + do b.iter { + mat_a = mat_a.add_m(&mat2::B); + } +} + +#[bench] +fn bench_mat3_add_m(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat3::A.clone(); + do b.iter { + mat_a = mat_a.add_m(&mat3::B); + } +} + +#[bench] +fn bench_mat4_add_m(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat4::A.clone(); + do b.iter { + mat_a = mat_a.add_m(&mat4::B); + } +} + +#[bench] +fn bench_mat2_sub_m(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat2::A.clone(); + do b.iter { + mat_a = mat_a.sub_m(&mat2::B); + } +} + +#[bench] +fn bench_mat3_sub_m(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat3::A.clone(); + do b.iter { + mat_a = mat_a.sub_m(&mat3::B); + } +} + +#[bench] +fn bench_mat4_sub_m(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat4::A.clone(); + do b.iter { + mat_a = mat_a.sub_m(&mat4::B); + } +} + +#[bench] +fn bench_mat2_mul_s(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat2::A.clone(); + do b.iter { + mat_a = mat_a.mul_s(2.0); + } +} + +#[bench] +fn bench_mat3_mul_s(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat3::A.clone(); + do b.iter { + mat_a = mat_a.mul_s(2.0); + } +} + +#[bench] +fn bench_mat4_mul_s(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat4::A.clone(); + do b.iter { + mat_a = mat_a.mul_s(2.0); + } +} + +#[bench] +fn bench_mat2_div_s(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat2::A.clone(); + do b.iter { + mat_a = mat_a.div_s(2.); + } +} + +#[bench] +fn bench_mat3_div_s(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat3::A.clone(); + do b.iter { + mat_a = mat_a.div_s(2.); + } +} + +#[bench] +fn bench_mat4_div_s(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat4::A.clone(); + do b.iter { + mat_a = mat_a.div_s(2.); + } +} + +#[bench] +fn bench_mat2_rem_s(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat2::A.clone(); + do b.iter { + mat_a = mat_a.rem_s(2.); + } +} + +#[bench] +fn bench_mat3_rem_s(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat3::A.clone(); + do b.iter { + mat_a = mat_a.rem_s(2.); + } +} + +#[bench] +fn bench_mat4_rem_s(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat4::A.clone(); + do b.iter { + mat_a = mat_a.rem_s(2.); + } +} + +#[bench] +fn bench_mat2_neg_self(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat2::A.clone(); + do b.iter { + mat_a.neg_self(); + } +} + +#[bench] +fn bench_mat3_neg_self(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat3::A.clone(); + do b.iter { + mat_a.neg_self(); + } +} + +#[bench] +fn bench_mat4_neg_self(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat4::A.clone(); + do b.iter { + mat_a.neg_self(); + } +} + +#[bench] +fn bench_mat2_div_self_s(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat2::A.clone(); + do b.iter { + mat_a.div_self_s(2.); + } +} + +#[bench] +fn bench_mat3_div_self_s(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat3::A.clone(); + do b.iter { + mat_a.div_self_s(2.); + } +} + +#[bench] +fn bench_mat4_div_self_s(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat4::A.clone(); + do b.iter { + mat_a.div_self_s(2.); + } +} + +#[bench] +fn bench_mat2_rem_self_s(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat2::A.clone(); + do b.iter { + mat_a.rem_self_s(2.); + } +} + +#[bench] +fn bench_mat3_rem_self_s(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat3::A.clone(); + do b.iter { + mat_a.rem_self_s(2.); + } +} + +#[bench] +fn bench_mat4_rem_self_s(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat4::A.clone(); + do b.iter { + mat_a.rem_self_s(2.); + } +} + +#[bench] +fn bench_mat2_mul_self_m(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat2::A.clone(); + do b.iter { + mat_a.mul_self_m(&mat2::B); + } +} + +#[bench] +fn bench_mat3_mul_self_m(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat3::A.clone(); + do b.iter { + mat_a.mul_self_m(&mat3::B); + } +} + +#[bench] +fn bench_mat4_mul_self_m(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat4::A.clone(); + do b.iter { + mat_a.mul_self_m(&mat4::B); + } +} + +#[bench] +fn bench_mat2_add_self_m(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat2::A.clone(); + do b.iter { + mat_a.add_self_m(&mat2::B); + } +} + +#[bench] +fn bench_mat3_add_self_m(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat3::A.clone(); + do b.iter { + mat_a.add_self_m(&mat3::B); + } +} + +#[bench] +fn bench_mat4_add_self_m(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat4::A.clone(); + do b.iter { + mat_a.add_self_m(&mat4::B); + } +} + +#[bench] +fn bench_mat2_sub_self_m(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat2::A.clone(); + do b.iter { + mat_a.sub_self_m(&mat2::B); + } +} + +#[bench] +fn bench_mat3_sub_self_m(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat3::A.clone(); + do b.iter { + mat_a.sub_self_m(&mat3::B); + } +} + +#[bench] +fn bench_mat4_sub_self_m(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat4::A.clone(); + do b.iter { + mat_a.add_self_m(&mat4::B); + } +} + + +#[bench] +fn bench_mat2_transpose(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat2::A.clone(); + do b.iter { + mat_a = mat_a.transpose(); + } +} + +#[bench] +fn bench_mat3_transpose(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat3::A.clone(); + do b.iter { + mat_a = mat_a.transpose(); + } +} + +#[bench] +fn bench_mat4_transpose(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat4::A.clone(); + do b.iter { + mat_a = mat_a.transpose(); + } +} + +#[bench] +fn bench_mat2_transpose_self(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat2::A.clone(); + do b.iter { + mat_a.transpose_self(); + } +} + +#[bench] +fn bench_mat3_transpose_self(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat3::A.clone(); + do b.iter { + mat_a.transpose_self(); + } +} + +#[bench] +fn bench_mat4_transpose_self(b: &mut extra::test::BenchHarness) { + let mut mat_a = mat4::A.clone(); + do b.iter { + mat_a.transpose_self(); + } +} From bfd2729c2909c6de862117a8a11e61f11bed7901 Mon Sep 17 00:00:00 2001 From: Colin Sherratt Date: Tue, 26 Nov 2013 02:30:30 -0500 Subject: [PATCH 2/4] cleaned up formatting in matrix.rs in both test and bench --- src/bench/matrix.rs | 49 +++++++++++---------------------------------- src/tests/matrix.rs | 46 +++++++++++++++++++++--------------------- 2 files changed, 35 insertions(+), 60 deletions(-) diff --git a/src/bench/matrix.rs b/src/bench/matrix.rs index 165b78e..c4b3126 100644 --- a/src/bench/matrix.rs +++ b/src/bench/matrix.rs @@ -26,14 +26,9 @@ pub mod mat2 { type float = f32; pub static A: Mat2 = Mat2 { x: Vec2 { x: 1.0, y: 3.0 }, - y: Vec2 { x: 2.0, y: 4.0 } }; + y: Vec2 { x: 2.0, y: 4.0 } }; pub static B: Mat2 = Mat2 { x: Vec2 { x: 2.0, y: 4.0 }, - y: Vec2 { x: 3.0, y: 5.0 } }; - pub static C: Mat2 = Mat2 { x: Vec2 { x: 2.0, y: 1.0 }, - y: Vec2 { x: 1.0, y: 2.0 } }; - - pub static V: Vec2 = Vec2 { x: 1.0, y: 2.0 }; - pub static F: f32 = 0.5; + y: Vec2 { x: 3.0, y: 5.0 } }; } pub mod mat3 { @@ -42,20 +37,11 @@ pub mod mat3 { type float = f32; pub static A: Mat3 = Mat3 { x: Vec3 { x: 1.0, y: 4.0, z: 7.0 }, - y: Vec3 { x: 2.0, y: 5.0, z: 8.0 }, - z: Vec3 { x: 3.0, y: 6.0, z: 9.0 } }; + y: Vec3 { x: 2.0, y: 5.0, z: 8.0 }, + z: Vec3 { x: 3.0, y: 6.0, z: 9.0 } }; pub static B: Mat3 = Mat3 { x: Vec3 { x: 2.0, y: 5.0, z: 8.0 }, - y: Vec3 { x: 3.0, y: 6.0, z: 9.0 }, - z: Vec3 { x: 4.0, y: 7.0, z: 10.0 } }; - pub static C: Mat3 = Mat3 { x: Vec3 { x: 2.0, y: 4.0, z: 6.0 }, - y: Vec3 { x: 0.0, y: 2.0, z: 4.0 }, - z: Vec3 { x: 0.0, y: 0.0, z: 1.0 } }; - pub static D: Mat3 = Mat3 { x: Vec3 { x: 3.0, y: 2.0, z: 1.0 }, - y: Vec3 { x: 2.0, y: 3.0, z: 2.0 }, - z: Vec3 { x: 1.0, y: 2.0, z: 3.0 } }; - - pub static V: Vec3 = Vec3 { x: 1.0, y: 2.0, z: 3.0 }; - pub static F: f32 = 0.5; + y: Vec3 { x: 3.0, y: 6.0, z: 9.0 }, + z: Vec3 { x: 4.0, y: 7.0, z: 10.0 } }; } pub mod mat4 { @@ -64,24 +50,13 @@ pub mod mat4 { type float = f32; pub static A: Mat4 = Mat4 { x: Vec4 { x: 1.0, y: 5.0, z: 9.0, w: 13.0 }, - y: Vec4 { x: 2.0, y: 6.0, z: 10.0, w: 14.0 }, - z: Vec4 { x: 3.0, y: 7.0, z: 11.0, w: 15.0 }, - w: Vec4 { x: 4.0, y: 8.0, z: 12.0, w: 16.0 } }; + y: Vec4 { x: 2.0, y: 6.0, z: 10.0, w: 14.0 }, + z: Vec4 { x: 3.0, y: 7.0, z: 11.0, w: 15.0 }, + w: Vec4 { x: 4.0, y: 8.0, z: 12.0, w: 16.0 } }; pub static B: Mat4 = Mat4 { x: Vec4 { x: 2.0, y: 6.0, z: 10.0, w: 14.0 }, - y: Vec4 { x: 3.0, y: 7.0, z: 11.0, w: 15.0 }, - z: Vec4 { x: 4.0, y: 8.0, z: 12.0, w: 16.0 }, - w: Vec4 { x: 5.0, y: 9.0, z: 13.0, w: 17.0 } }; - pub static C: Mat4 = Mat4 { x: Vec4 { x: 3.0, y: 2.0, z: 1.0, w: 1.0 }, - y: Vec4 { x: 2.0, y: 3.0, z: 2.0, w: 2.0 }, - z: Vec4 { x: 1.0, y: 2.0, z: 3.0, w: 3.0 }, - w: Vec4 { x: 0.0, y: 1.0, z: 1.0, w: 0.0 } }; - pub static D: Mat4 = Mat4 { x: Vec4 { x: 4.0, y: 3.0, z: 2.0, w: 1.0 }, - y: Vec4 { x: 3.0, y: 4.0, z: 3.0, w: 2.0 }, - z: Vec4 { x: 2.0, y: 3.0, z: 4.0, w: 3.0 }, - w: Vec4 { x: 1.0, y: 2.0, z: 3.0, w: 4.0 } }; - - pub static V: Vec4 = Vec4 { x: 1.0, y: 2.0, z: 3.0, w: 4.0 }; - pub static F: f32 = 0.5; + y: Vec4 { x: 3.0, y: 7.0, z: 11.0, w: 15.0 }, + z: Vec4 { x: 4.0, y: 8.0, z: 12.0, w: 16.0 }, + w: Vec4 { x: 5.0, y: 9.0, z: 13.0, w: 17.0 } }; } #[bench] diff --git a/src/tests/matrix.rs b/src/tests/matrix.rs index 7edda32..82cfc71 100644 --- a/src/tests/matrix.rs +++ b/src/tests/matrix.rs @@ -23,11 +23,11 @@ pub mod mat2 { type float = f64; pub static A: Mat2 = Mat2 { x: Vec2 { x: 1.0, y: 3.0 }, - y: Vec2 { x: 2.0, y: 4.0 } }; + y: Vec2 { x: 2.0, y: 4.0 } }; pub static B: Mat2 = Mat2 { x: Vec2 { x: 2.0, y: 4.0 }, - y: Vec2 { x: 3.0, y: 5.0 } }; + y: Vec2 { x: 3.0, y: 5.0 } }; pub static C: Mat2 = Mat2 { x: Vec2 { x: 2.0, y: 1.0 }, - y: Vec2 { x: 1.0, y: 2.0 } }; + y: Vec2 { x: 1.0, y: 2.0 } }; pub static V: Vec2 = Vec2 { x: 1.0, y: 2.0 }; pub static F: f64 = 0.5; @@ -39,17 +39,17 @@ pub mod mat3 { type float = f64; pub static A: Mat3 = Mat3 { x: Vec3 { x: 1.0, y: 4.0, z: 7.0 }, - y: Vec3 { x: 2.0, y: 5.0, z: 8.0 }, - z: Vec3 { x: 3.0, y: 6.0, z: 9.0 } }; + y: Vec3 { x: 2.0, y: 5.0, z: 8.0 }, + z: Vec3 { x: 3.0, y: 6.0, z: 9.0 } }; pub static B: Mat3 = Mat3 { x: Vec3 { x: 2.0, y: 5.0, z: 8.0 }, - y: Vec3 { x: 3.0, y: 6.0, z: 9.0 }, - z: Vec3 { x: 4.0, y: 7.0, z: 10.0 } }; + y: Vec3 { x: 3.0, y: 6.0, z: 9.0 }, + z: Vec3 { x: 4.0, y: 7.0, z: 10.0 } }; pub static C: Mat3 = Mat3 { x: Vec3 { x: 2.0, y: 4.0, z: 6.0 }, - y: Vec3 { x: 0.0, y: 2.0, z: 4.0 }, - z: Vec3 { x: 0.0, y: 0.0, z: 1.0 } }; + y: Vec3 { x: 0.0, y: 2.0, z: 4.0 }, + z: Vec3 { x: 0.0, y: 0.0, z: 1.0 } }; pub static D: Mat3 = Mat3 { x: Vec3 { x: 3.0, y: 2.0, z: 1.0 }, - y: Vec3 { x: 2.0, y: 3.0, z: 2.0 }, - z: Vec3 { x: 1.0, y: 2.0, z: 3.0 } }; + y: Vec3 { x: 2.0, y: 3.0, z: 2.0 }, + z: Vec3 { x: 1.0, y: 2.0, z: 3.0 } }; pub static V: Vec3 = Vec3 { x: 1.0, y: 2.0, z: 3.0 }; pub static F: f64 = 0.5; @@ -61,21 +61,21 @@ pub mod mat4 { type float = f64; pub static A: Mat4 = Mat4 { x: Vec4 { x: 1.0, y: 5.0, z: 9.0, w: 13.0 }, - y: Vec4 { x: 2.0, y: 6.0, z: 10.0, w: 14.0 }, - z: Vec4 { x: 3.0, y: 7.0, z: 11.0, w: 15.0 }, - w: Vec4 { x: 4.0, y: 8.0, z: 12.0, w: 16.0 } }; + y: Vec4 { x: 2.0, y: 6.0, z: 10.0, w: 14.0 }, + z: Vec4 { x: 3.0, y: 7.0, z: 11.0, w: 15.0 }, + w: Vec4 { x: 4.0, y: 8.0, z: 12.0, w: 16.0 } }; pub static B: Mat4 = Mat4 { x: Vec4 { x: 2.0, y: 6.0, z: 10.0, w: 14.0 }, - y: Vec4 { x: 3.0, y: 7.0, z: 11.0, w: 15.0 }, - z: Vec4 { x: 4.0, y: 8.0, z: 12.0, w: 16.0 }, - w: Vec4 { x: 5.0, y: 9.0, z: 13.0, w: 17.0 } }; + y: Vec4 { x: 3.0, y: 7.0, z: 11.0, w: 15.0 }, + z: Vec4 { x: 4.0, y: 8.0, z: 12.0, w: 16.0 }, + w: Vec4 { x: 5.0, y: 9.0, z: 13.0, w: 17.0 } }; pub static C: Mat4 = Mat4 { x: Vec4 { x: 3.0, y: 2.0, z: 1.0, w: 1.0 }, - y: Vec4 { x: 2.0, y: 3.0, z: 2.0, w: 2.0 }, - z: Vec4 { x: 1.0, y: 2.0, z: 3.0, w: 3.0 }, - w: Vec4 { x: 0.0, y: 1.0, z: 1.0, w: 0.0 } }; + y: Vec4 { x: 2.0, y: 3.0, z: 2.0, w: 2.0 }, + z: Vec4 { x: 1.0, y: 2.0, z: 3.0, w: 3.0 }, + w: Vec4 { x: 0.0, y: 1.0, z: 1.0, w: 0.0 } }; pub static D: Mat4 = Mat4 { x: Vec4 { x: 4.0, y: 3.0, z: 2.0, w: 1.0 }, - y: Vec4 { x: 3.0, y: 4.0, z: 3.0, w: 2.0 }, - z: Vec4 { x: 2.0, y: 3.0, z: 4.0, w: 3.0 }, - w: Vec4 { x: 1.0, y: 2.0, z: 3.0, w: 4.0 } }; + y: Vec4 { x: 3.0, y: 4.0, z: 3.0, w: 2.0 }, + z: Vec4 { x: 2.0, y: 3.0, z: 4.0, w: 3.0 }, + w: Vec4 { x: 1.0, y: 2.0, z: 3.0, w: 4.0 } }; pub static V: Vec4 = Vec4 { x: 1.0, y: 2.0, z: 3.0, w: 4.0 }; pub static F: f64 = 0.5; From 0c2e82c82ffcc77efda2959d4ec2108716b32fae Mon Sep 17 00:00:00 2001 From: Colin Sherratt Date: Tue, 26 Nov 2013 02:39:00 -0500 Subject: [PATCH 3/4] Add travis support for bench build. --- .travis.sh | 1 + .travis.yml | 2 ++ 2 files changed, 3 insertions(+) create mode 100644 .travis.sh diff --git a/.travis.sh b/.travis.sh new file mode 100644 index 0000000..7ea18fb --- /dev/null +++ b/.travis.sh @@ -0,0 +1 @@ +`find build -name benchbench` --bench diff --git a/.travis.yml b/.travis.yml index b703dad..d4cd45d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,3 +5,5 @@ install: - sudo apt-get install rust-nightly script: - rustpkg test tests + - rustpkg build --opt-level=3 bench + - sh .travis.sh From c99ef02be1e58cddd0b5c16774947961d55c7463 Mon Sep 17 00:00:00 2001 From: Colin Sherratt Date: Tue, 26 Nov 2013 03:14:48 -0500 Subject: [PATCH 4/4] Pad out the benchmarks to make the performance difference more pronounced. This also speed the benchmarks up since the bench suite has trouble with benchmarks that less then 100ns in length. --- src/bench/matrix.rs | 168 +++++++++++++++++++++++++++++++++----------- 1 file changed, 126 insertions(+), 42 deletions(-) diff --git a/src/bench/matrix.rs b/src/bench/matrix.rs index c4b3126..7f36dc7 100644 --- a/src/bench/matrix.rs +++ b/src/bench/matrix.rs @@ -63,7 +63,9 @@ pub mod mat4 { fn bench_mat2_mul_m(b: &mut extra::test::BenchHarness) { let mut mat_a = mat2::A.clone(); do b.iter { - mat_a = mat_a.mul_m(&mat2::B); + for _ in range(0, 1000) { + mat_a = mat_a.mul_m(&mat2::B); + } } } @@ -71,7 +73,9 @@ fn bench_mat2_mul_m(b: &mut extra::test::BenchHarness) { fn bench_mat3_mul_m(b: &mut extra::test::BenchHarness) { let mut mat_a = mat3::A.clone(); do b.iter { - mat_a = mat_a.mul_m(&mat3::B); + for _ in range(0, 1000) { + mat_a = mat_a.mul_m(&mat3::B); + } } } @@ -79,7 +83,9 @@ fn bench_mat3_mul_m(b: &mut extra::test::BenchHarness) { fn bench_mat4_mul_m(b: &mut extra::test::BenchHarness) { let mut mat_a = mat4::A.clone(); do b.iter { - mat_a = mat_a.mul_m(&mat4::B); + for _ in range(0, 1000) { + mat_a = mat_a.mul_m(&mat4::B); + } } } @@ -87,7 +93,9 @@ fn bench_mat4_mul_m(b: &mut extra::test::BenchHarness) { fn bench_mat2_add_m(b: &mut extra::test::BenchHarness) { let mut mat_a = mat2::A.clone(); do b.iter { - mat_a = mat_a.add_m(&mat2::B); + for _ in range(0, 1000) { + mat_a = mat_a.add_m(&mat2::B); + } } } @@ -95,7 +103,9 @@ fn bench_mat2_add_m(b: &mut extra::test::BenchHarness) { fn bench_mat3_add_m(b: &mut extra::test::BenchHarness) { let mut mat_a = mat3::A.clone(); do b.iter { - mat_a = mat_a.add_m(&mat3::B); + for _ in range(0, 1000) { + mat_a = mat_a.add_m(&mat3::B); + } } } @@ -103,7 +113,9 @@ fn bench_mat3_add_m(b: &mut extra::test::BenchHarness) { fn bench_mat4_add_m(b: &mut extra::test::BenchHarness) { let mut mat_a = mat4::A.clone(); do b.iter { - mat_a = mat_a.add_m(&mat4::B); + for _ in range(0, 1000) { + mat_a = mat_a.add_m(&mat4::B); + } } } @@ -111,7 +123,9 @@ fn bench_mat4_add_m(b: &mut extra::test::BenchHarness) { fn bench_mat2_sub_m(b: &mut extra::test::BenchHarness) { let mut mat_a = mat2::A.clone(); do b.iter { - mat_a = mat_a.sub_m(&mat2::B); + for _ in range(0, 1000) { + mat_a = mat_a.sub_m(&mat2::B); + } } } @@ -119,7 +133,9 @@ fn bench_mat2_sub_m(b: &mut extra::test::BenchHarness) { fn bench_mat3_sub_m(b: &mut extra::test::BenchHarness) { let mut mat_a = mat3::A.clone(); do b.iter { - mat_a = mat_a.sub_m(&mat3::B); + for _ in range(0, 1000) { + mat_a = mat_a.sub_m(&mat3::B); + } } } @@ -127,7 +143,9 @@ fn bench_mat3_sub_m(b: &mut extra::test::BenchHarness) { fn bench_mat4_sub_m(b: &mut extra::test::BenchHarness) { let mut mat_a = mat4::A.clone(); do b.iter { - mat_a = mat_a.sub_m(&mat4::B); + for _ in range(0, 1000) { + mat_a = mat_a.sub_m(&mat4::B); + } } } @@ -135,7 +153,9 @@ fn bench_mat4_sub_m(b: &mut extra::test::BenchHarness) { fn bench_mat2_mul_s(b: &mut extra::test::BenchHarness) { let mut mat_a = mat2::A.clone(); do b.iter { - mat_a = mat_a.mul_s(2.0); + for _ in range(0, 1000) { + mat_a = mat_a.mul_s(2.0); + } } } @@ -143,7 +163,9 @@ fn bench_mat2_mul_s(b: &mut extra::test::BenchHarness) { fn bench_mat3_mul_s(b: &mut extra::test::BenchHarness) { let mut mat_a = mat3::A.clone(); do b.iter { - mat_a = mat_a.mul_s(2.0); + for _ in range(0, 1000) { + mat_a = mat_a.mul_s(2.0); + } } } @@ -151,7 +173,9 @@ fn bench_mat3_mul_s(b: &mut extra::test::BenchHarness) { fn bench_mat4_mul_s(b: &mut extra::test::BenchHarness) { let mut mat_a = mat4::A.clone(); do b.iter { - mat_a = mat_a.mul_s(2.0); + for _ in range(0, 1000) { + mat_a = mat_a.mul_s(2.0); + } } } @@ -159,7 +183,9 @@ fn bench_mat4_mul_s(b: &mut extra::test::BenchHarness) { fn bench_mat2_div_s(b: &mut extra::test::BenchHarness) { let mut mat_a = mat2::A.clone(); do b.iter { - mat_a = mat_a.div_s(2.); + for _ in range(0, 1000) { + mat_a = mat_a.div_s(2.); + } } } @@ -167,7 +193,9 @@ fn bench_mat2_div_s(b: &mut extra::test::BenchHarness) { fn bench_mat3_div_s(b: &mut extra::test::BenchHarness) { let mut mat_a = mat3::A.clone(); do b.iter { - mat_a = mat_a.div_s(2.); + for _ in range(0, 1000) { + mat_a = mat_a.div_s(2.); + } } } @@ -175,7 +203,9 @@ fn bench_mat3_div_s(b: &mut extra::test::BenchHarness) { fn bench_mat4_div_s(b: &mut extra::test::BenchHarness) { let mut mat_a = mat4::A.clone(); do b.iter { - mat_a = mat_a.div_s(2.); + for _ in range(0, 1000) { + mat_a = mat_a.div_s(2.); + } } } @@ -183,7 +213,9 @@ fn bench_mat4_div_s(b: &mut extra::test::BenchHarness) { fn bench_mat2_rem_s(b: &mut extra::test::BenchHarness) { let mut mat_a = mat2::A.clone(); do b.iter { - mat_a = mat_a.rem_s(2.); + for _ in range(0, 1000) { + mat_a = mat_a.rem_s(2.); + } } } @@ -191,7 +223,9 @@ fn bench_mat2_rem_s(b: &mut extra::test::BenchHarness) { fn bench_mat3_rem_s(b: &mut extra::test::BenchHarness) { let mut mat_a = mat3::A.clone(); do b.iter { - mat_a = mat_a.rem_s(2.); + for _ in range(0, 1000) { + mat_a = mat_a.rem_s(2.); + } } } @@ -199,7 +233,9 @@ fn bench_mat3_rem_s(b: &mut extra::test::BenchHarness) { fn bench_mat4_rem_s(b: &mut extra::test::BenchHarness) { let mut mat_a = mat4::A.clone(); do b.iter { - mat_a = mat_a.rem_s(2.); + for _ in range(0, 1000) { + mat_a = mat_a.rem_s(2.); + } } } @@ -207,7 +243,9 @@ fn bench_mat4_rem_s(b: &mut extra::test::BenchHarness) { fn bench_mat2_neg_self(b: &mut extra::test::BenchHarness) { let mut mat_a = mat2::A.clone(); do b.iter { - mat_a.neg_self(); + for _ in range(0, 1000) { + mat_a.neg_self(); + } } } @@ -215,7 +253,9 @@ fn bench_mat2_neg_self(b: &mut extra::test::BenchHarness) { fn bench_mat3_neg_self(b: &mut extra::test::BenchHarness) { let mut mat_a = mat3::A.clone(); do b.iter { - mat_a.neg_self(); + for _ in range(0, 1000) { + mat_a.neg_self(); + } } } @@ -223,7 +263,9 @@ fn bench_mat3_neg_self(b: &mut extra::test::BenchHarness) { fn bench_mat4_neg_self(b: &mut extra::test::BenchHarness) { let mut mat_a = mat4::A.clone(); do b.iter { - mat_a.neg_self(); + for _ in range(0, 1000) { + mat_a.neg_self(); + } } } @@ -231,7 +273,9 @@ fn bench_mat4_neg_self(b: &mut extra::test::BenchHarness) { fn bench_mat2_div_self_s(b: &mut extra::test::BenchHarness) { let mut mat_a = mat2::A.clone(); do b.iter { - mat_a.div_self_s(2.); + for _ in range(0, 1000) { + mat_a.div_self_s(2.); + } } } @@ -239,7 +283,9 @@ fn bench_mat2_div_self_s(b: &mut extra::test::BenchHarness) { fn bench_mat3_div_self_s(b: &mut extra::test::BenchHarness) { let mut mat_a = mat3::A.clone(); do b.iter { - mat_a.div_self_s(2.); + for _ in range(0, 1000) { + mat_a.div_self_s(2.); + } } } @@ -247,7 +293,9 @@ fn bench_mat3_div_self_s(b: &mut extra::test::BenchHarness) { fn bench_mat4_div_self_s(b: &mut extra::test::BenchHarness) { let mut mat_a = mat4::A.clone(); do b.iter { - mat_a.div_self_s(2.); + for _ in range(0, 1000) { + mat_a.div_self_s(2.); + } } } @@ -255,7 +303,9 @@ fn bench_mat4_div_self_s(b: &mut extra::test::BenchHarness) { fn bench_mat2_rem_self_s(b: &mut extra::test::BenchHarness) { let mut mat_a = mat2::A.clone(); do b.iter { - mat_a.rem_self_s(2.); + for _ in range(0, 1000) { + mat_a.rem_self_s(2.); + } } } @@ -263,7 +313,9 @@ fn bench_mat2_rem_self_s(b: &mut extra::test::BenchHarness) { fn bench_mat3_rem_self_s(b: &mut extra::test::BenchHarness) { let mut mat_a = mat3::A.clone(); do b.iter { - mat_a.rem_self_s(2.); + for _ in range(0, 1000) { + mat_a.rem_self_s(2.); + } } } @@ -271,7 +323,9 @@ fn bench_mat3_rem_self_s(b: &mut extra::test::BenchHarness) { fn bench_mat4_rem_self_s(b: &mut extra::test::BenchHarness) { let mut mat_a = mat4::A.clone(); do b.iter { - mat_a.rem_self_s(2.); + for _ in range(0, 1000) { + mat_a.rem_self_s(2.); + } } } @@ -279,7 +333,9 @@ fn bench_mat4_rem_self_s(b: &mut extra::test::BenchHarness) { fn bench_mat2_mul_self_m(b: &mut extra::test::BenchHarness) { let mut mat_a = mat2::A.clone(); do b.iter { - mat_a.mul_self_m(&mat2::B); + for _ in range(0, 1000) { + mat_a.mul_self_m(&mat2::B); + } } } @@ -287,7 +343,9 @@ fn bench_mat2_mul_self_m(b: &mut extra::test::BenchHarness) { fn bench_mat3_mul_self_m(b: &mut extra::test::BenchHarness) { let mut mat_a = mat3::A.clone(); do b.iter { - mat_a.mul_self_m(&mat3::B); + for _ in range(0, 1000) { + mat_a.mul_self_m(&mat3::B); + } } } @@ -295,7 +353,9 @@ fn bench_mat3_mul_self_m(b: &mut extra::test::BenchHarness) { fn bench_mat4_mul_self_m(b: &mut extra::test::BenchHarness) { let mut mat_a = mat4::A.clone(); do b.iter { - mat_a.mul_self_m(&mat4::B); + for _ in range(0, 1000) { + mat_a.mul_self_m(&mat4::B); + } } } @@ -303,7 +363,9 @@ fn bench_mat4_mul_self_m(b: &mut extra::test::BenchHarness) { fn bench_mat2_add_self_m(b: &mut extra::test::BenchHarness) { let mut mat_a = mat2::A.clone(); do b.iter { - mat_a.add_self_m(&mat2::B); + for _ in range(0, 1000) { + mat_a.add_self_m(&mat2::B); + } } } @@ -311,7 +373,9 @@ fn bench_mat2_add_self_m(b: &mut extra::test::BenchHarness) { fn bench_mat3_add_self_m(b: &mut extra::test::BenchHarness) { let mut mat_a = mat3::A.clone(); do b.iter { - mat_a.add_self_m(&mat3::B); + for _ in range(0, 1000) { + mat_a.add_self_m(&mat3::B); + } } } @@ -319,7 +383,9 @@ fn bench_mat3_add_self_m(b: &mut extra::test::BenchHarness) { fn bench_mat4_add_self_m(b: &mut extra::test::BenchHarness) { let mut mat_a = mat4::A.clone(); do b.iter { - mat_a.add_self_m(&mat4::B); + for _ in range(0, 1000) { + mat_a.add_self_m(&mat4::B); + } } } @@ -327,7 +393,9 @@ fn bench_mat4_add_self_m(b: &mut extra::test::BenchHarness) { fn bench_mat2_sub_self_m(b: &mut extra::test::BenchHarness) { let mut mat_a = mat2::A.clone(); do b.iter { - mat_a.sub_self_m(&mat2::B); + for _ in range(0, 1000) { + mat_a.sub_self_m(&mat2::B); + } } } @@ -335,7 +403,9 @@ fn bench_mat2_sub_self_m(b: &mut extra::test::BenchHarness) { fn bench_mat3_sub_self_m(b: &mut extra::test::BenchHarness) { let mut mat_a = mat3::A.clone(); do b.iter { - mat_a.sub_self_m(&mat3::B); + for _ in range(0, 1000) { + mat_a.sub_self_m(&mat3::B); + } } } @@ -343,7 +413,9 @@ fn bench_mat3_sub_self_m(b: &mut extra::test::BenchHarness) { fn bench_mat4_sub_self_m(b: &mut extra::test::BenchHarness) { let mut mat_a = mat4::A.clone(); do b.iter { - mat_a.add_self_m(&mat4::B); + for _ in range(0, 1000) { + mat_a.add_self_m(&mat4::B); + } } } @@ -352,7 +424,9 @@ fn bench_mat4_sub_self_m(b: &mut extra::test::BenchHarness) { fn bench_mat2_transpose(b: &mut extra::test::BenchHarness) { let mut mat_a = mat2::A.clone(); do b.iter { - mat_a = mat_a.transpose(); + for _ in range(0, 1000) { + mat_a = mat_a.transpose(); + } } } @@ -360,7 +434,9 @@ fn bench_mat2_transpose(b: &mut extra::test::BenchHarness) { fn bench_mat3_transpose(b: &mut extra::test::BenchHarness) { let mut mat_a = mat3::A.clone(); do b.iter { - mat_a = mat_a.transpose(); + for _ in range(0, 1000) { + mat_a = mat_a.transpose(); + } } } @@ -368,7 +444,9 @@ fn bench_mat3_transpose(b: &mut extra::test::BenchHarness) { fn bench_mat4_transpose(b: &mut extra::test::BenchHarness) { let mut mat_a = mat4::A.clone(); do b.iter { - mat_a = mat_a.transpose(); + for _ in range(0, 1000) { + mat_a = mat_a.transpose(); + } } } @@ -376,7 +454,9 @@ fn bench_mat4_transpose(b: &mut extra::test::BenchHarness) { fn bench_mat2_transpose_self(b: &mut extra::test::BenchHarness) { let mut mat_a = mat2::A.clone(); do b.iter { - mat_a.transpose_self(); + for _ in range(0, 1000) { + mat_a.transpose_self(); + } } } @@ -384,7 +464,9 @@ fn bench_mat2_transpose_self(b: &mut extra::test::BenchHarness) { fn bench_mat3_transpose_self(b: &mut extra::test::BenchHarness) { let mut mat_a = mat3::A.clone(); do b.iter { - mat_a.transpose_self(); + for _ in range(0, 1000) { + mat_a.transpose_self(); + } } } @@ -392,6 +474,8 @@ fn bench_mat3_transpose_self(b: &mut extra::test::BenchHarness) { fn bench_mat4_transpose_self(b: &mut extra::test::BenchHarness) { let mut mat_a = mat4::A.clone(); do b.iter { - mat_a.transpose_self(); + for _ in range(0, 1000) { + mat_a.transpose_self(); + } } }