Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #![feature(box_syntax)]
- use crossbeam_utils::thread;
- use std::time::Instant;
- const MAP_WIDTH: usize = 8192;
- const MAP_ARRAY_SIZE: usize = MAP_WIDTH * MAP_WIDTH;
- const NUM_CORES: usize = 4;
- fn main() {
- let t1_a = Instant::now();
- let mut a: Box<[u64; MAP_ARRAY_SIZE]> = box [0x00; MAP_ARRAY_SIZE];
- assert_eq!(MAP_ARRAY_SIZE % NUM_CORES, 0);
- thread::scope(|scope_handle| {
- for chunk in a.chunks_mut(MAP_ARRAY_SIZE / 4) {
- scope_handle.spawn(move |_| {
- do_stuff(chunk, 0x01);
- });
- }
- }).unwrap();
- assert_eq!((*a)[0], 1);
- let t2_a = Instant::now();
- println!("chunks {:?}", t2_a - t1_a);
- /////////////////////////////////////
- let t1_b = Instant::now();
- let mut b: Box<[u64; MAP_ARRAY_SIZE]> = box [0x00; MAP_ARRAY_SIZE];
- do_stuff(&mut (*b), 0x01);
- assert_eq!((*b)[0], 1);
- let t2_b = Instant::now();
- println!("linear {:?}", t2_b - t1_b);
- }
- fn do_stuff(a: &mut [u64], n: u64) {
- for x in a.iter_mut() {
- *x = n;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement