From 70fa220f7a2b1b2275679547ac21768ab657cea2 Mon Sep 17 00:00:00 2001 From: Dennis Kobert Date: Sun, 12 Jan 2020 20:36:45 +0100 Subject: Add diagnostic script, prune result evaluation --- rust-unmangle | 32 ++++++++++++++++++++++++++++++++ src/solvers/gpu/host.rs | 2 +- src/solvers/gpu/output.rs | 19 +++++++++++-------- 3 files changed, 44 insertions(+), 9 deletions(-) create mode 100755 rust-unmangle diff --git a/rust-unmangle b/rust-unmangle new file mode 100755 index 0000000..183f7f9 --- /dev/null +++ b/rust-unmangle @@ -0,0 +1,32 @@ +#!/usr/bin/sed -rf +# Unmangle Rust symbols +# See https://git.kernel.org/cgit/linux/kernel/git/tip/tip.git/commit/?id=cae15db74999edb96dd9f5bbd4d55849391dd92b +# Example, with [FlameGraph](https://github.com/brendangregg/FlameGraph): +# perf record -g target/debug/bin +# perf script | stackcollapse-perf | rust-unmangle | flamegraph > perf.svg + +# Remove hash and address offset +s/::h[0-9a-f]{16}//g +s/\+0x[0-9a-f]+//g + +# Convert special characters +s/\$C\$/,/g +s/\$SP\$/@/g +s/\$BP\$/*/g +s/\$RF\$/\&/g +s/\$LT\$//g +s/\$LP\$/(/g +s/\$RP\$/)/g +s/\$u20\$/ /g +s/\$u27\$/'/g +s/\$u5b\$/[/g +s/\$u5d\$/]/g +s/\$u7b\$/{/g +s/\$u7d\$/}/g +s/\$u7e\$/~/g + +# Fix . and _ +s/\.\./::/g +s/[^\.]\.[^\.]/./g +s/([;:])_/\1/g diff --git a/src/solvers/gpu/host.rs b/src/solvers/gpu/host.rs index d67138e..4fe835a 100644 --- a/src/solvers/gpu/host.rs +++ b/src/solvers/gpu/host.rs @@ -68,7 +68,7 @@ impl Host { output_sender, }; let handle = std::thread::Builder::new() - .name("GPU Deamon".into()) + .name("GPU Host Deamon".into()) .spawn(move || { solver.run(); }) diff --git a/src/solvers/gpu/output.rs b/src/solvers/gpu/output.rs index 4e52ab4..9cbef1a 100644 --- a/src/solvers/gpu/output.rs +++ b/src/solvers/gpu/output.rs @@ -30,15 +30,18 @@ impl InBuffer { .expect("Channel to Output Daemon broke") { Message::ResultMessage(results) => { - if let Some(result_walls) = self.row_requests.get(&results.id) { - return Some(Self::calc_results( - results.valid_walls().as_ref(), - result_walls, - )); - } else { - if results.data.iter().any(|x| *x != 0) { - self.results_requests.insert(results.id, results); + if results.data.iter().any(|x| *x != 0) { + println!("Horay results!"); + if let Some(result_walls) = self.row_requests.get(&results.id) { + return Some(Self::calc_results( + results.valid_walls().as_ref(), + result_walls, + )); } else { + self.results_requests.insert(results.id, results); + } + } else { + if self.row_requests.remove(&results.id).is_none() { self.banned_requests.insert(results.id); } } -- cgit v1.2.3-54-g00ecf