blob: 494cc8fd19e986b9df32c0a74bdaa446afd7a429 [file]
#!/bin/bash
#
# Build and run Chapter 4 experiment: write/read parallel throughput.
#
# Usage:
# ./run.sh [threads]
#
# threads: on | off | both (default: both)
#
# off -> C1: serial baseline (ENABLE_THREADS=OFF)
# on -> C4: column-parallel (ENABLE_THREADS=ON)
# both -> run C1 then C4
#
# Environment variables:
# TOTAL_ROWS rows per run (default: 5000000)
#
set -e
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PROJECT_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
OUT_DIR="$SCRIPT_DIR/E4_12_throughput"
THREADS_MODE=${1:-both}
TOTAL_ROWS=${TOTAL_ROWS:-5000000}
CMAKE=$(command -v cmake 2>/dev/null || echo "")
if [ -z "$CMAKE" ] && [ -x "/Applications/CMake.app/Contents/bin/cmake" ]; then
CMAKE="/Applications/CMake.app/Contents/bin/cmake"
fi
[ -z "$CMAKE" ] && { echo "ERROR: cmake not found"; exit 1; }
NCPU=$(sysctl -n hw.ncpu 2>/dev/null || nproc 2>/dev/null || echo 4)
build_and_run() {
local threads=$1 # ON or OFF
local label=$2 # C1 or C4
local BUILD_DIR="$PROJECT_DIR/cmake-build-release-${label}"
echo " [build] throughput_bench (THREADS=$threads) -> $BUILD_DIR"
mkdir -p "$BUILD_DIR"
cd "$BUILD_DIR"
"$CMAKE" -DCMAKE_BUILD_TYPE=Release \
-DENABLE_THREADS=$threads \
-DENABLE_SIMD=OFF \
-DBUILD_TEST=OFF \
"$PROJECT_DIR" > /dev/null 2>&1
"$CMAKE" --build . --target throughput_bench -j"$NCPU" 2>&1 | tail -3
cd "$SCRIPT_DIR"
echo " [run] throughput_bench ($label, rows=$TOTAL_ROWS)"
"$BUILD_DIR/experiment/chap04/throughput_bench" "$TOTAL_ROWS" "$OUT_DIR"
echo ""
}
echo "========================================"
echo " Chapter 4: Parallel Throughput (E4-12)"
echo "========================================"
echo " threads_mode : $THREADS_MODE"
echo " total_rows : $TOTAL_ROWS"
echo " output : $OUT_DIR"
echo ""
case "$THREADS_MODE" in
off) build_and_run OFF C1 ;;
on) build_and_run ON C4 ;;
both) build_and_run OFF C1; build_and_run ON C4 ;;
*) echo "Usage: $0 [on|off|both]"; exit 1 ;;
esac
echo "========================================"
echo " Done! CSVs in $OUT_DIR/"
echo " write_results_OFF.csv (C1 serial)"
echo " write_results_ON.csv (C4 parallel)"
echo " read_results_OFF.csv"
echo " read_results_ON.csv"
echo "========================================"