Skip to content

Instantly share code, notes, and snippets.

@bluss
bluss / result
Created November 20, 2016 19:17
name tests::sort_ ns/iter tests::new_sort_ ns/iter diff ns/iter diff %
ascending 58,373 (685 MB/s) 55,175 (724 MB/s) -3,198 -5.48%
big_ascending 240,410 (1331 MB/s) 108,604 (2946 MB/s) -131,806 -54.83%
big_descending 241,974 (1322 MB/s) 112,114 (2854 MB/s) -129,860 -53.67%
big_random_large 2,042,345 (156 MB/s) 1,964,713 (162 MB/s) -77,632 -3.80%
big_random_medium 16,891 (189 MB/s) 15,804 (202 MB/s) -1,087 -6.44%
big_random_small 800 (200 MB/s) 803 (199 MB/s) 3 0.38%
descending 58,727 (681 MB/s) 55,781 (717 MB/s) -2,946 -5.02%
random_large 769,153 (104 MB/s) 738,682 (108 MB/s) -30,471 -3.96%
random_medium 5,812 (137 MB/s) 5,735 (139 MB/s) -77 -1.32%
#![feature(test)]
extern crate test;
use test::{Bencher};
/// Mask of the value bits of a continuation byte
const CONT_MASK: u8 = 0b0011_1111;
/// Value of the tag bits (tag mask is !CONT_MASK) of a continuation byte
; ModuleID = 'countbytes.cgu-0.rs'
source_filename = "countbytes.cgu-0.rs"
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
%str_slice = type { i8*, i64 }
%"3.std::string::String" = type { %"3.std::vec::Vec<u8>" }
%"3.std::vec::Vec<u8>" = type { %"5.alloc::raw_vec::RawVec<u8>", i64 }
%"5.alloc::raw_vec::RawVec<u8>" = type { %"2.std::ptr::Unique<u8>", i64 }
%"2.std::ptr::Unique<u8>" = type { %"2.core::nonzero::NonZero<*const u8>", %"2.std::marker::PhantomData<u8>" }
@bluss
bluss / -
Created November 10, 2016 00:24
Cargo.toml | 2 +-
src/eigenvalues/general.rs | 10 +++++-----
src/eigenvalues/symmetric.rs | 8 ++++----
src/eigenvalues/types.rs | 7 ++++---
src/impl_prelude.rs | 2 +-
src/least_squares.rs | 22 +++++++++++-----------
src/solve_linear/general.rs | 16 ++++++++--------
src/solve_linear/symmetric.rs | 16 ++++++++--------
src/svd/general.rs | 4 ++--
src/svd/types.rs | 7 ++++---
These benchmarks are a bit noisy and imperfect. We focus on the big changes.
extend-after-1.log is taking advantage of TrustedLen in Vec::extend.
name extend-before-1.log ns/iter extend-after-1.log ns/iter diff ns/iter diff %
bench_chain_all 17,866 17,917 51 0.29%
bench_chain_chain_collect 62,249 32,370 -29,879 -48.00%
bench_chain_collect 26,828 25,386 -1,442 -5.37%
bench_chain_extend_ref 18,070 18,606 536 2.97%
@bluss
bluss / 0-benchmark-result
Last active October 27, 2016 17:29
(Note: I also tested instead of chaining on single elements, chaining the slice half and half, and qualitatively it has the same result)
Improvements with impl TrustedLen on Chain, and using TrustedLen in Vec::extend
name extend-before-1.log ns/iter extend-after-1.log ns/iter diff ns/iter diff %
bench_chain_chain_collect 62,249 32,370 -29,879 -48.00%
bench_chain_collect 26,828 25,386 -1,442 -5.37%
bench_nest_chain_chain_collect 44,562 41,087 -3,475 -7.80%
/Additional/ improvements using `.fold()` too in Vec::extend
name extend-after-1.log ns/iter extend-after-fold-2.log ns/iter diff ns/iter diff %
; ModuleID = 'chain_bool_split.cgu-0.rs'
source_filename = "chain_bool_split.cgu-0.rs"
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
%"2.std::ops::Range<usize>" = type { i64, i64 }
%"8.unwind::libunwind::_Unwind_Exception" = type { i64, void (i32, %"8.unwind::libunwind::_Unwind_Exception"*)*, [6 x i64] }
%"8.unwind::libunwind::_Unwind_Context" = type {}
; Function Attrs: uwtable
; ModuleID = 'chain_bool.cgu-0.rs'
source_filename = "chain_bool.cgu-0.rs"
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
%"8.unwind::libunwind::_Unwind_Exception" = type { i64, void (i32, %"8.unwind::libunwind::_Unwind_Exception"*)*, [6 x i64] }
%"8.unwind::libunwind::_Unwind_Context" = type {}
; Function Attrs: uwtable
define i64 @range_chain_default_fold(i64, i64, i64 (i64, i64)* nocapture) unnamed_addr #0 personality i32 (i32, i32, i64, %"8.unwind::libunwind::_Unwind_Exception"*, %"8.unwind::libunwind::_Unwind_Context"*)* @rust_eh_personality {
; ModuleID = 'chain_two_calls_really.cgu-0.rs'
source_filename = "chain_two_calls_really.cgu-0.rs"
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
%"8.unwind::libunwind::_Unwind_Exception" = type { i64, void (i32, %"8.unwind::libunwind::_Unwind_Exception"*)*, [6 x i64] }
%"8.unwind::libunwind::_Unwind_Context" = type {}
; Function Attrs: uwtable
define i64 @range_chain_default_fold(i64, i64, i64 (i64, i64)* nocapture) unnamed_addr #0 personality i32 (i32, i32, i64, %"8.unwind::libunwind::_Unwind_Exception"*, %"8.unwind::libunwind::_Unwind_Context"*)* @rust_eh_personality {
; ModuleID = 'chain_two_calls.cgu-0.rs'
source_filename = "chain_two_calls.cgu-0.rs"
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
%"8.unwind::libunwind::_Unwind_Exception" = type { i64, void (i32, %"8.unwind::libunwind::_Unwind_Exception"*)*, [6 x i64] }
%"8.unwind::libunwind::_Unwind_Context" = type {}
; Function Attrs: uwtable
define i64 @range_chain_default_fold(i64, i64, i64 (i64, i64)* nocapture) unnamed_addr #0 personality i32 (i32, i32, i64, %"8.unwind::libunwind::_Unwind_Exception"*, %"8.unwind::libunwind::_Unwind_Context"*)* @rust_eh_personality {