Skip to content
Snippets Groups Projects
Commit b4e9f258 authored by Russel Arbore's avatar Russel Arbore
Browse files

bfs bench

parent cbd5e70e
No related branches found
No related tags found
1 merge request!200Rodinia benches
Pipeline #201873 passed
......@@ -1252,6 +1252,7 @@ version = "0.1.0"
dependencies = [
"async-std",
"clap",
"criterion",
"hercules_rt",
"juno_build",
"nom 8.0.0",
......
......@@ -8,6 +8,9 @@ edition = "2021"
name = "juno_bfs"
path = "src/main.rs"
[lib]
path = "src/lib.rs"
[features]
cuda = ["juno_build/cuda", "hercules_rt/cuda"]
......@@ -21,3 +24,10 @@ async-std = "*"
clap = { version = "*", features = ["derive"] }
with_builtin_macros = "0.1.0"
nom = "*"
[dev-dependencies]
criterion = { version = "0.5", features = ["html_reports"] }
[[bench]]
name = "bfs_bench"
harness = false
#![feature(concat_idents)]
use criterion::{criterion_group, criterion_main, Criterion};
use hercules_rt::{runner, HerculesImmBox, HerculesImmBoxTo};
juno_build::juno!("bfs");
use juno_bfs::graph_parser::*;
fn bfs_bench(c: &mut Criterion) {
let mut group = c.benchmark_group("bfs bench");
let mut r = runner!(bfs);
let input = "data/graph4096.txt";
let (nodes, source, edges) = parse_graph(input.into());
let n = nodes.len() as u64;
let m = edges.len() as u64;
let nodes = HerculesImmBox::from(&nodes as &[Node]);
let edges = HerculesImmBox::from(&edges as &[u32]);
group.bench_function("bfs bench 4096", |b| {
b.iter(|| {
async_std::task::block_on(async { r.run(n, m, nodes.to(), source, edges.to()).await });
})
});
let input = "data/graph65536.txt";
let (nodes, source, edges) = parse_graph(input.into());
let n = nodes.len() as u64;
let m = edges.len() as u64;
let nodes = HerculesImmBox::from(&nodes as &[Node]);
let edges = HerculesImmBox::from(&edges as &[u32]);
group.bench_function("bfs bench 65536", |b| {
b.iter(|| {
async_std::task::block_on(async { r.run(n, m, nodes.to(), source, edges.to()).await });
})
});
}
criterion_group!(benches, bfs_bench);
criterion_main!(benches);
#![feature(concat_idents)]
pub mod graph_parser;
mod rust_bfs;
use graph_parser::*;
use hercules_rt::{runner, HerculesImmBox, HerculesImmBoxTo, HerculesMutBox};
use clap::Parser;
juno_build::juno!("bfs");
#[derive(Parser)]
#[clap(author, version, about, long_about = None)]
pub struct BFSInputs {
pub input: String,
}
fn run_bfs(nodes: &[Node], source: u32, edges: &[u32]) -> Vec<i32> {
let n = nodes.len() as u64;
let m = edges.len() as u64;
let nodes = HerculesImmBox::from(nodes);
let edges = HerculesImmBox::from(edges);
let mut runner = runner!(bfs);
HerculesMutBox::from(async_std::task::block_on(async {
runner.run(n, m, nodes.to(), source, edges.to()).await
}))
.as_slice()
.to_vec()
}
pub fn bfs_harness(args: BFSInputs) {
let BFSInputs { input } = args;
let (nodes, source, edges) = parse_graph(input);
let costs_juno = run_bfs(&nodes, source, &edges);
let costs_ref = rust_bfs::bfs(&nodes, source, &edges);
assert_eq!(costs_juno, costs_ref);
}
#![feature(concat_idents)]
mod graph_parser;
mod rust_bfs;
use graph_parser::*;
use hercules_rt::{runner, HerculesImmBox, HerculesImmBoxTo, HerculesMutBox};
use clap::Parser;
juno_build::juno!("bfs");
#[derive(Parser)]
#[clap(author, version, about, long_about = None)]
struct BFSInputs {
input: String,
}
fn run_bfs(nodes: &[Node], source: u32, edges: &[u32]) -> Vec<i32> {
let n = nodes.len() as u64;
let m = edges.len() as u64;
let nodes = HerculesImmBox::from(nodes);
let edges = HerculesImmBox::from(edges);
let mut runner = runner!(bfs);
HerculesMutBox::from(async_std::task::block_on(async {
runner.run(n, m, nodes.to(), source, edges.to()).await
}))
.as_slice()
.to_vec()
}
fn bfs_harness(args: BFSInputs) {
let BFSInputs { input } = args;
let (nodes, source, edges) = parse_graph(input);
let costs_juno = run_bfs(&nodes, source, &edges);
let costs_ref = rust_bfs::bfs(&nodes, source, &edges);
assert_eq!(costs_juno, costs_ref);
}
use juno_bfs::{bfs_harness, BFSInputs};
fn main() {
let args = BFSInputs::parse();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment