Skip to content

Instantly share code, notes, and snippets.

@gnzlbg
Last active July 5, 2018 12:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gnzlbg/09d7e546df2215bee83fc5fe02840292 to your computer and use it in GitHub Desktop.
Save gnzlbg/09d7e546df2215bee83fc5fe02840292 to your computer and use it in GitHub Desktop.
indicatif+crossbeam
#![feature(test)]
extern crate test;
use test::black_box;
extern crate jemallocator;
use jemallocator::Jemalloc;
extern crate indicatif;
use indicatif::{ProgressBar, MultiProgress, ProgressStyle};
extern crate crossbeam;
#[global_allocator]
static ALLOC: Jemalloc = Jemalloc;
fn main() {
let start_bytes: u64 = 1;
let end_bytes: u64 = 10_000_000_000;
let m = MultiProgress::new();
crossbeam::scope(|scope| {
scope.spawn(|| run_test("vec_zero_init", vector_zero_initialized, &m, start_bytes, end_bytes) );
scope.spawn(|| run_test("vec_ones_init", vector_ones_initialized, &m, start_bytes, end_bytes) );
});
m.join_and_clear().unwrap();
}
fn run_test<F>(name: &'static str, f: F, m: &MultiProgress, mut start: u64, end: u64)
where F: Fn(u64) -> () + Send + 'static
{
let pb = m.add(ProgressBar::new(end));
pb.set_style(ProgressStyle::default_bar()
.template("{msg:15}: [{elapsed_precise}] [{bar:40.cyan/blue}] {bytes}/{total_bytes} ({eta})")
.progress_chars("#>-"));
pb.set_position(0);
loop {
pb.set_message(&format!("{}", name));
pb.set_position(start);
if start > end {
break;
}
f(start);
start *= 2;
}
pb.finish();
}
#[inline(never)]
fn vector_zero_initialized(bytes: u64) {
let v = vec![0_u8; bytes as usize];
black_box(v);
}
#[inline(never)]
fn vector_ones_initialized(bytes: u64) {
let v = vec![1_u8; bytes as usize];
black_box(v);
}
#![feature(test)]
extern crate test;
use test::black_box;
extern crate jemallocator;
use jemallocator::Jemalloc;
extern crate indicatif;
use indicatif::{ProgressBar, MultiProgress, ProgressStyle};
extern crate crossbeam;
#[global_allocator]
static ALLOC: Jemalloc = Jemalloc;
fn main() {
let start_bytes: u64 = 1;
// let end_bytes: u64 = 10_000_000_000;
let end_bytes: u64 = 10_000_000_000;
let m = MultiProgress::new();
crossbeam::scope(|s| {
s.spawn(|| run_test("vec_zero_init", vector_zero_initialized, &m, start_bytes, end_bytes));
s.spawn(|| run_test("vec_ones_init", vector_ones_initialized, &m, start_bytes, end_bytes));
});
m.join_and_clear().unwrap();
}
fn run_test<F>(name: &'static str, f: F, m: &MultiProgress, mut start: u64, end: u64)
where F: Fn(u64) -> () + Send + 'static
{
let pb = m.add(ProgressBar::new(end));
pb.set_style(ProgressStyle::default_bar()
.template("{msg}: [{elapsed_precise}] [{bar:40.cyan/blue}] {bytes}/{total_bytes} ({eta})")
.progress_chars("#>-"));
pb.set_position(0);
let _ = std::thread::spawn(move || {
loop {
pb.set_message(&format!("{}", name));
pb.set_position(start);
if start > end {
break;
}
f(start);
start *= 2;
}
pb.finish();
});
}
#[inline(never)]
fn vector_zero_initialized(bytes: u64) {
let v = vec![0_u8; bytes as usize];
black_box(v);
}
#[inline(never)]
fn vector_ones_initialized(bytes: u64) {
let v = vec![1_u8; bytes as usize];
black_box(v);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment