Branch v2.0.1 was renamed to master.
Files
LithosAnanake/scripts/perf-profile_control.sh

78 lines
2.9 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
#
# StarForth — Steady-State Virtual Machine Runtime
#
# Copyright (c) 20232025 Robert A. James
# All rights reserved.
#
# This file is part of the StarForth project.
#
# Licensed under the StarForth License, Version 1.0 (the "License");
# you may not use this file except in compliance with the License.
#
# You may obtain a copy of the License at:
# https://github.com/star.4th@proton.me/StarForth/LICENSE.txt
#
# This software is provided "AS IS", WITHOUT WARRANTY OF ANY KIND,
# express or implied, including but not limited to the warranties of
# merchantability, fitness for a particular purpose, and noninfringement.
#
# See the License for the specific language governing permissions and
# limitations under the License.
#
# StarForth — Steady-State Virtual Machine Runtime
# Copyright (c) 20232025 Robert A. James
# All rights reserved.
#
# This file is part of the StarForth project.
#
# Licensed under the StarForth License, Version 1.0 (the "License");
# you may not use this file except in compliance with the License.
#
# You may obtain a copy of the License at:
# https://github.com/star.4th@proton.me/StarForth/LICENSE.txt
#
# This software is provided "AS IS", WITHOUT WARRANTY OF ANY KIND,
# express or implied, including but not limited to the warranties of
# merchantability, fitness for a particular purpose, and noninfringement.
#
# See the License for the specific language governing permissions and
# limitations under the License.
#
#
# profile_control.sh - Target Control Words performance bottleneck
set -euo pipefail
EXE="./build/starforth"
echo "[CLEAN]"; make clean
echo "[BUILD for control words profiling]"
make CFLAGS="-std=c99 -O3 -g -fno-omit-frame-pointer -DSTARFORTH_PERFORMANCE -DNDEBUG -march=native -Wall -Werror -Iinclude -Isrc/word_source -Isrc/test_runner/include -DSTRICT_PTR=1" LDFLAGS=""
[[ -x "$EXE" ]] || { echo "ERROR: $EXE missing/not executable"; exit 2; }
echo "[RECORD] Control Words perf profile..."
rm -f perf.data CONTROL_REPORT.txt
# Create a minimal FORTH program that hammers control flow
cat > control_test.forth << 'EOF'
: HAMMER_IF 1000 0 DO I 2 MOD IF 42 ELSE 24 THEN DROP LOOP ;
: HAMMER_LOOPS 100 0 DO 10 0 DO I J + DROP LOOP LOOP ;
: HAMMER_NESTED 50 0 DO I 3 MOD DUP IF DUP 2 = IF 99 ELSE 88 THEN ELSE 77 THEN DROP LOOP ;
HAMMER_IF HAMMER_IF HAMMER_IF HAMMER_IF HAMMER_IF
HAMMER_LOOPS HAMMER_LOOPS HAMMER_LOOPS
HAMMER_NESTED HAMMER_NESTED HAMMER_NESTED HAMMER_NESTED
EOF
echo "Running targeted control flow benchmark..."
# Use --log-none and timeout to avoid cleanup segfault
timeout 10s perf record -F 999 -g --call-graph dwarf -e cycles:u -- "$EXE" --log-none < control_test.forth 2>/dev/null || true
echo "[REPORT → CONTROL_REPORT.txt]"
perf report --stdio --no-children --percent-limit 1.0 --sort overhead,symbol,dso > CONTROL_REPORT.txt
echo "DONE → CONTROL_REPORT.txt"; head -50 CONTROL_REPORT.txt || true
rm -f control_test.forth