Files
2125_GCE/benchmark/glyphrunner_direct.py
T

89 lines
2.5 KiB
Python
Raw Normal View History

2026-07-09 12:54:44 -04:00
#!/usr/bin/env python3
"""Direct Glyphrunner Benchmark - Simplified, No Threading
Runs XIC symbolic execution directly without threading complexity.
Shows true Glyphrunner throughput on a single machine.
"""
import time
import sys
import os
from pathlib import Path
from datetime import datetime
# Add parent directory to path for imports
sys.path.insert(0, str(Path(__file__).parent.parent))
os.chdir(Path(__file__).parent.parent)
PROGRAMS_DIR = Path.cwd() / "programs"
def main():
"""Run direct Glyphrunner benchmark."""
duration = int(sys.argv[1]) if len(sys.argv) > 1 else 60
# Use an existing demo program that works
test_program = str(PROGRAMS_DIR / "demo_control_flow_if.gx.json")
print("\n" + "="*70)
print("GLYPHRUNNER BENCHMARK: Direct XIC Execution")
print("="*70)
print(f"Start Time: {datetime.now().isoformat()}")
print(f"Duration: {duration} seconds")
print(f"Test Program: {test_program}")
print()
from xic_executor import run_xic
execution_count = 0
success_count = 0
failed_count = 0
start_time = time.time()
last_report = start_time
print("Starting execution...")
print()
while time.time() - start_time < duration:
try:
ctx = run_xic(test_program, debug=False)
execution_count += 1
success_count += 1
except Exception as e:
execution_count += 1
failed_count += 1
# Report progress every 5 seconds
now = time.time()
if now - last_report > 5:
elapsed = now - start_time
rate = execution_count / elapsed if elapsed > 0 else 0
print(f"⚡ {execution_count} executions | {rate:.1f} exec/sec | {success_count} success | {failed_count} failed")
last_report = now
total_elapsed = time.time() - start_time
# Final report
print()
print("="*70)
print("GLYPHRUNNER BENCHMARK RESULTS (Direct Execution)")
print("="*70)
print()
print(f"Duration: {total_elapsed:.1f} seconds")
print(f"Total Executions: {execution_count}")
print(f"Successful: {success_count}")
print(f"Failed: {failed_count}")
success_rate = 100 * success_count / max(1, execution_count)
print(f"Success Rate: {success_rate:.1f}%")
print()
throughput = execution_count / total_elapsed if total_elapsed > 0 else 0
print(f"Throughput: {throughput:.1f} executions/second")
print()
print("="*70)
print(f"End Time: {datetime.now().isoformat()}")
print("="*70)
if __name__ == "__main__":
main()