172 lines
4.8 KiB
Markdown
172 lines
4.8 KiB
Markdown
# SmartEdgeAI - (gem5)
|
|
|
|
This repo holds **all scripts, commands, and logs** for Phase 3.
|
|
|
|
## Prerequisites
|
|
|
|
### Install gem5
|
|
Before running any simulations, you need to install and build gem5:
|
|
|
|
```bash
|
|
# Clone gem5 repository
|
|
git clone https://github.com/gem5/gem5.git /home/carlos/projects/gem5/gem5src/gem5
|
|
|
|
# Build gem5 for ARM
|
|
cd /home/carlos/projects/gem5/gem5src/gem5
|
|
scons build/ARM/gem5.opt -j$(nproc)
|
|
|
|
# Verify installation
|
|
sh scripts/check_gem5.sh
|
|
```
|
|
|
|
### Install ARM Cross-Compiler
|
|
```bash
|
|
# Ubuntu/Debian
|
|
sudo apt-get install gcc-arm-linux-gnueabihf
|
|
|
|
# macOS (if using Homebrew)
|
|
brew install gcc-arm-linux-gnueabihf
|
|
```
|
|
|
|
## Quick Start (Run Everything)
|
|
|
|
To run the complete workflow automatically:
|
|
|
|
```bash
|
|
chmod +x run_all.sh
|
|
sh run_all.sh
|
|
```
|
|
|
|
This will execute all steps in sequence with error checking and progress reporting.
|
|
|
|
## Manual Steps (Order of operations)
|
|
|
|
### 0. Check Prerequisites
|
|
```bash
|
|
sh scripts/check_gem5.sh
|
|
```
|
|
**Check logs**: Should show "✓ All checks passed!" or installation instructions
|
|
|
|
### 1. Setup Environment
|
|
```bash
|
|
sh scripts/env.sh
|
|
```
|
|
**Check logs**: `cat logs/env.txt` - Should show environment variables and "READY" message
|
|
|
|
### 2. Build Workloads
|
|
```bash
|
|
sh scripts/build_workloads.sh
|
|
```
|
|
**Check logs**: Look for "All workloads compiled successfully!" and verify binaries exist:
|
|
```bash
|
|
ls -la /home/carlos/projects/gem5/gem5-run/
|
|
```
|
|
|
|
### 3. Test Single Run
|
|
```bash
|
|
sh scripts/run_one.sh tinyml_kws big high 0 1MB
|
|
```
|
|
**Check logs**:
|
|
- Verify stats.txt has content: `ls -l /home/carlos/projects/gem5/gem5-data/SmartEdgeAI/results/tinyml_kws_big_high_l21MB_d0/stats.txt`
|
|
- Check simulation output: `cat logs/tinyml_kws_big_high_l21MB_d0.stdout.log`
|
|
- Check for errors: `cat logs/tinyml_kws_big_high_l21MB_d0.stderr.log`
|
|
|
|
### 4. Run Full Matrix
|
|
```bash
|
|
sh scripts/sweep.sh
|
|
```
|
|
**Check logs**: Monitor progress and verify all combinations complete:
|
|
```bash
|
|
ls -la /home/carlos/projects/gem5/gem5-data/SmartEdgeAI/results/
|
|
```
|
|
|
|
### 5. Extract Statistics
|
|
```bash
|
|
sh scripts/extract_csv.sh
|
|
```
|
|
**Check logs**: Verify CSV was created with data:
|
|
```bash
|
|
head -5 /home/carlos/projects/gem5/gem5-data/SmartEdgeAI/results/summary.csv
|
|
```
|
|
|
|
### 6. Compute Energy Metrics
|
|
```bash
|
|
python3 scripts/energy_post.py
|
|
```
|
|
**Check logs**: Verify energy calculations:
|
|
```bash
|
|
head -5 /home/carlos/projects/gem5/gem5-data/SmartEdgeAI/results/summary_energy.csv
|
|
```
|
|
|
|
### 7. Generate Plots
|
|
```bash
|
|
python3 scripts/plot_epi.py
|
|
python3 scripts/plot_edp_tinyml.py
|
|
```
|
|
**Check logs**: Verify plots were created:
|
|
```bash
|
|
ls -la /home/carlos/projects/gem5/gem5-data/SmartEdgeAI/results/fig_*.png
|
|
```
|
|
|
|
### 8. Bundle Logs
|
|
```bash
|
|
sh scripts/bundle_logs.sh
|
|
```
|
|
**Check logs**: Verify bundled logs:
|
|
```bash
|
|
cat logs/TERMINAL_EXCERPTS.txt
|
|
cat logs/STATS_EXCERPTS.txt
|
|
```
|
|
|
|
### 9. (Optional) Generate Delta Analysis
|
|
```bash
|
|
python3 scripts/diff_table.py
|
|
```
|
|
**Check logs**: Verify delta calculations:
|
|
```bash
|
|
head -5 results/phase3_drowsy_deltas.csv
|
|
```
|
|
|
|
## Paths assumed
|
|
- gem5 binary: `/home/carlos/projects/gem5/gem5src/gem5/build/ARM/gem5.opt` (updated from tree.log analysis)
|
|
- config: `scripts/hetero_big_little.py`
|
|
- workloads: `/home/carlos/projects/gem5/gem5-run/{tinyml_kws,sensor_fusion,aes_ccm,attention_kernel}`
|
|
|
|
## Output Locations
|
|
- **Results**: `/home/carlos/projects/gem5/gem5-data/SmartEdgeAI/results/` (mirrored to `results/`)
|
|
- **Logs**: `/home/carlos/projects/gem5/gem5-data/SmartEdgeAI/logs/` (mirrored to `logs/`)
|
|
|
|
## Troubleshooting
|
|
|
|
### Common Issues
|
|
|
|
**Empty stats.txt files (0 bytes)**
|
|
- **Cause**: gem5 binary doesn't exist or simulation failed
|
|
- **Solution**: Run `sh scripts/check_gem5.sh` and install gem5 if needed
|
|
- **Check**: `ls -la /home/carlos/projects/gem5/gem5src/gem5/build/ARM/gem5.opt`
|
|
|
|
**CSV extraction shows empty values**
|
|
- **Cause**: Simulation didn't run, so no statistics were generated
|
|
- **Solution**: Fix gem5 installation first, then re-run simulations
|
|
|
|
**"ModuleNotFoundError: No module named 'matplotlib'"**
|
|
- **Solution**: Install matplotlib: `pip install matplotlib` or `sudo apt-get install python3-matplotlib`
|
|
|
|
**"ValueError: could not convert string to float: ''"**
|
|
- **Cause**: Empty CSV values from failed simulations
|
|
- **Solution**: Fixed in updated scripts - they now handle empty values gracefully
|
|
|
|
**Permission errors**
|
|
- **Solution**: Make scripts executable: `chmod +x scripts/*.sh`
|
|
|
|
**Path issues**
|
|
- **Solution**: Verify `ROOT` variable in `scripts/env.sh` points to correct gem5 installation
|
|
|
|
### Debugging Steps
|
|
1. **Check gem5 installation**: `sh scripts/check_gem5.sh`
|
|
2. **Verify workload binaries**: `ls -la /home/carlos/projects/gem5/gem5-run/`
|
|
3. **Test single simulation**: `sh scripts/run_one.sh tinyml_kws big high 0 1MB`
|
|
4. **Check simulation logs**: `cat logs/tinyml_kws_big_high_l21MB_d0.stdout.log`
|
|
5. **Verify stats output**: `ls -l /home/carlos/projects/gem5/gem5-data/SmartEdgeAI/results/tinyml_kws_big_high_l21MB_d0/stats.txt`
|
|
|