Skip to content

Instantly share code, notes, and snippets.

View hsqStephenZhang's full-sized avatar
🎯
Focusing

z combinator hsqStephenZhang

🎯
Focusing
View GitHub Profile
@hsqStephenZhang
hsqStephenZhang / riscv-debian.md
Created March 5, 2026 17:17 — forked from apivovarov/riscv-debian.md
Run RISC-V Debian via QEMU #riscv #qemu

Run RISC-V Debian GNU/Linux bullseye/sid via QEMU.

  1. Run the latest version of Debian on regular x86_64 box (at least ver 10 Buster, better to run ver 11 Bullseye)
  2. If opensbi and u-boot-qemu packages are not found add testing apt repository (aka bullseye). Or even unstable (aka sid)
sudo vi /etc/apt/sources.list

# Add testing repo (or unstable)
deb http://cdn-aws.deb.debian.org/debian testing main
deb-src http://cdn-aws.deb.debian.org/debian testing main
@hsqStephenZhang
hsqStephenZhang / binary_search_bench.rs
Last active March 2, 2026 10:05
benchmark code for binary search code
/*
Intel(R) Core(TM) i5-14600KF, 64G mem
❯ perf stat -e branches,branch-misses $BENCH_BIN --bench --profile-time 5 "Binary Search/Traditional"
Gnuplot not found, using plotters backend
Benchmarking Binary Search/Traditional: Complete (Analysis Disabled)
Performance counter stats for 'target/release/deps/bs_bench-df11742845ad013f --bench --profile-time 5 Binary Search/Traditional':
@hsqStephenZhang
hsqStephenZhang / neon_str2int_bench.rs
Created February 24, 2026 10:18
benchmark code for different str2int approach on neon
use core::arch::aarch64::*;
use std::hint::black_box;
use criterion::{BenchmarkId, Criterion, criterion_group, criterion_main};
use rand::RngExt;
/// we use unzip to extract even and odd indexed digits, then we can do multiplication and addition
/// in parallel. for [1, 2, 3, 4, 5, 6, 7, 8, 9, 5, 4, 3, 2, 1, 0, 0]
/// it will be split into even = [1, 3, 5, 7, 9, 4, 2, 0, ...] and odd = [2, 4, 6, 8, 5, 3, 1, 0,
/// ...] then we can compute 1*10 + 2, 3*10 + 4, 5*10 + 6, 7*10 + 8, 9*10 + 5, 4*10 + 3, 2*10 + 1,
@hsqStephenZhang
hsqStephenZhang / neon_atoi_simd_bench.rs
Created February 22, 2026 20:01
benchmark for atoi simd on neon
use criterion::{Criterion, criterion_group, criterion_main};
use std::arch::aarch64::*;
use std::hint::black_box;
#[inline(always)]
unsafe fn atoi_unzip(data_ptr: *const u8) -> u64 {
let zeros = vdupq_n_u8(b'0');
let reg = vsubq_u8(vld1q_u8(data_ptr), zeros);
// Level 1: u8 -> u16
@hsqStephenZhang
hsqStephenZhang / number.rs
Created February 20, 2026 15:51
benchmark between sonic-rs and atoi_simd
// Benchmark comparison between atoi_simd and sonic-number
use std::hint::black_box;
use atoi_simd::parse as atoi_simd_parse;
use criterion::{Criterion, criterion_group, criterion_main};
use sonic_number::simd_str2int;
const NUMBERS: &[&str] = &[
"1234567890123",
"12345678901234",
@hsqStephenZhang
hsqStephenZhang / cas_weak_strong_cmp.rs
Created February 12, 2026 13:09
bench between CAS operations' weak and strong versions in rust
use criterion::{black_box, criterion_group, criterion_main, Criterion};
use std::sync::atomic::{AtomicUsize, Ordering};
/// 显式地使用 compare_exchange_weak 来模拟 compare_exchange (strong) 的语义
/// 只有当值真的不相等时才返回 Err,虚假失败会在内部循环掉
fn compare_exchange_weak_wrapped(
atomic: &AtomicUsize,
current: usize,
new: usize,
) -> Result<usize, usize> {
@hsqStephenZhang
hsqStephenZhang / wasm_bench.rs
Last active February 11, 2026 22:09
wasm simd benchmark for sonic-rs
//! A simple benchmark for comparing wasm fallback vs simd128 performance.
//!
//! Build & run:
//! # fallback (no simd128)
//! cargo build --example wasm_bench --target wasm32-wasip1 --release
//! wasmtime run target/wasm32-wasip1/release/examples/wasm_bench.wasm
//!
//! # simd128
//! RUSTFLAGS="-C target-feature=+simd128" \
//! cargo build --example wasm_bench --target wasm32-wasip1 --release
@hsqStephenZhang
hsqStephenZhang / bench_std_time_rdtsc.rs
Created February 3, 2026 11:55
benchmark std::time and rdtsc performance.
/// Benchmark comparing RDTSC vs std::time::Instant for time measurements
///
/// This benchmark measures the overhead of both time measurement approaches
/// used in Miri's tracing infrastructure.
use std::time::{Duration, Instant};
#[cfg(all(target_os = "linux", any(target_arch = "x86", target_arch = "x86_64")))]
fn rdtsc() -> u64 {
#[cfg(target_arch = "x86")]
@hsqStephenZhang
hsqStephenZhang / stream.c
Created November 28, 2025 18:51
stream cpu operation benchmark
/*-----------------------------------------------------------------------*/
/* Program: STREAM */
/* Revision: $Id: stream.c,v 5.10 2013/01/17 16:01:06 mccalpin Exp mccalpin $ */
/* Original code developed by John D. McCalpin */
/* Programmers: John D. McCalpin */
/* Joe R. Zagar */
/* */
/* This program measures memory transfer rates in MB/s for simple */
/* computational kernels coded in C. */
@hsqStephenZhang
hsqStephenZhang / hm_type_inference_algo_w.rs
Last active November 19, 2025 13:08
hm type inference by algo_w
#![allow(unused)]
use std::collections::{HashMap, HashSet};
#[derive(Clone, Debug)]
pub enum Expr {
Bool(bool),
Int(i32),
// x
Var(String),