From 28737dca5e60a52bbf7c8a93ccf69c90bdc70564 Mon Sep 17 00:00:00 2001 From: Luca Barbato <lu_zero@gentoo.org> Date: Wed, 26 Sep 2018 18:07:49 +0200 Subject: [PATCH] Benchmark idct4 and idct8 --- benches/bench.rs | 5 ++++- benches/transform.rs | 50 ++++++++++++++++++++++++++++++++++++++++++++ src/transform.rs | 4 ++-- 3 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 benches/transform.rs diff --git a/benches/bench.rs b/benches/bench.rs index 07fd9b40..f9ede03a 100644 --- a/benches/bench.rs +++ b/benches/bench.rs @@ -13,6 +13,7 @@ extern crate rand; extern crate rav1e; mod predict; +mod transform; mod me; use criterion::*; @@ -24,6 +25,8 @@ use rav1e::predict::*; use rav1e::rdo::rdo_cfl_alpha; use rav1e::*; +use transform::transform; + #[cfg(feature = "comparative_bench")] mod comparative; @@ -145,4 +148,4 @@ criterion_group!(me, me::get_sad); criterion_main!(comparative::intra_prediction); #[cfg(not(feature = "comparative_bench"))] -criterion_main!(write_block, intra_prediction, cdef, cfl, me); +criterion_main!(write_block, intra_prediction, cdef, cfl, me, transform); diff --git a/benches/transform.rs b/benches/transform.rs new file mode 100644 index 00000000..d3d9783e --- /dev/null +++ b/benches/transform.rs @@ -0,0 +1,50 @@ +// Copyright (c) 2017-2018, The rav1e contributors. All rights reserved +// +// This source code is subject to the terms of the BSD 2 Clause License and +// the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License +// was not distributed with this source code in the LICENSE file, you can +// obtain it at www.aomedia.org/license/software. If the Alliance for Open +// Media Patent License 1.0 was not distributed with this source code in the +// PATENTS file, you can obtain it at www.aomedia.org/license/patent. + +use criterion::*; +use rand::{ChaChaRng, Rng, SeedableRng}; +use rav1e::transform; + +fn bench_idct4(b: &mut Bencher, bit_depth: &usize) { + let mut ra = ChaChaRng::from_seed([0; 32]); + let input: [i32; 4] = ra.gen(); + let mut output = [0i32; 4]; + let range = bit_depth + 8; + + b.iter(|| { + transform::av1_idct4(&input[..], &mut output[..], range); + }); +} + +pub fn av1_idct4(c: &mut Criterion) { + let plain = Fun::new("plain", bench_idct4); + let funcs = vec![plain]; + + c.bench_functions("av1_idct4_8", funcs, 8); +} + +fn bench_idct8(b: &mut Bencher, bit_depth: &usize) { + let mut ra = ChaChaRng::from_seed([0; 32]); + let input: [i32; 8] = ra.gen(); + let mut output = [0i32; 8]; + let range = bit_depth + 8; + + b.iter(|| { + transform::av1_idct8(&input[..], &mut output[..], range); + }); +} + +pub fn av1_idct8(c: &mut Criterion) { + let plain = Fun::new("plain", bench_idct8); + let funcs = vec![plain]; + + c.bench_functions("av1_idct8_8", funcs, 8); +} + +criterion_group!(transform, av1_idct4, av1_idct8); diff --git a/src/transform.rs b/src/transform.rs index c9c46705..10467e6f 100644 --- a/src/transform.rs +++ b/src/transform.rs @@ -56,7 +56,7 @@ fn clamp_value(value: i32, bit: usize) -> i32 { clamp(value, min_value, max_value) } -fn av1_idct4(input: &[i32], output: &mut [i32], range: usize) { +pub fn av1_idct4(input: &[i32], output: &mut [i32], range: usize) { let cos_bit = 12; // stage 0 @@ -129,7 +129,7 @@ fn av1_iidentity4(input: &[i32], output: &mut [i32], _range: usize) { } } -fn av1_idct8(input: &[i32], output: &mut [i32], range: usize) { +pub fn av1_idct8(input: &[i32], output: &mut [i32], range: usize) { // TODO: call idct4 let cos_bit = 12; // stage 0 -- GitLab