Initial
This commit is contained in:
306
explorer/README.md
Normal file
306
explorer/README.md
Normal file
@@ -0,0 +1,306 @@
|
||||
# Visual SpaceTime Explorer
|
||||
|
||||
Interactive visualization tool for understanding and exploring space-time tradeoffs in algorithms and systems.
|
||||
|
||||
## Features
|
||||
|
||||
- **Interactive Plots**: Pan, zoom, and explore tradeoff curves in real-time
|
||||
- **Live Parameter Updates**: See immediate impact of changing data sizes and strategies
|
||||
- **Multiple Visualizations**: Memory hierarchy, checkpoint intervals, cost analysis, 3D views
|
||||
- **Educational Mode**: Learn theoretical concepts through visual demonstrations
|
||||
- **Export Capabilities**: Save analyses and plots for presentations or reports
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
# From sqrtspace-tools root directory
|
||||
pip install matplotlib numpy
|
||||
|
||||
# For full features including animations
|
||||
pip install matplotlib numpy scipy
|
||||
```
|
||||
|
||||
## Quick Start
|
||||
|
||||
```python
|
||||
from explorer import SpaceTimeVisualizer
|
||||
|
||||
# Launch interactive explorer
|
||||
visualizer = SpaceTimeVisualizer()
|
||||
visualizer.create_main_window()
|
||||
|
||||
# The explorer will open with:
|
||||
# - Main tradeoff curves
|
||||
# - Memory hierarchy view
|
||||
# - Checkpoint visualization
|
||||
# - Cost analysis
|
||||
# - Performance metrics
|
||||
# - 3D space-time-cost plot
|
||||
```
|
||||
|
||||
## Interactive Controls
|
||||
|
||||
### Sliders
|
||||
- **Data Size**: Adjust n from 100 to 1 billion (log scale)
|
||||
- See how different algorithms scale with data size
|
||||
|
||||
### Radio Buttons
|
||||
- **Strategy**: Choose between sqrt_n, linear, log_n, constant
|
||||
- **View**: Switch between tradeoff, animated, comparison views
|
||||
|
||||
### Mouse Controls
|
||||
- **Pan**: Click and drag on plots
|
||||
- **Zoom**: Scroll wheel or right-click drag
|
||||
- **Reset**: Double-click to reset view
|
||||
|
||||
### Export Button
|
||||
- Save current analysis as JSON
|
||||
- Export plots as high-resolution PNG
|
||||
|
||||
## Visualization Types
|
||||
|
||||
### 1. Main Tradeoff Curves
|
||||
Shows theoretical and practical space-time tradeoffs:
|
||||
|
||||
```python
|
||||
# The main plot displays:
|
||||
- O(n) space algorithms (standard)
|
||||
- O(√n) space algorithms (Williams' bound)
|
||||
- O(log n) space algorithms (compressed)
|
||||
- O(1) space algorithms (streaming)
|
||||
- Feasible region (gray shaded area)
|
||||
- Current configuration (red dot)
|
||||
```
|
||||
|
||||
### 2. Memory Hierarchy View
|
||||
Visualizes data distribution across cache levels:
|
||||
|
||||
```python
|
||||
# Shows how data is placed in:
|
||||
- L1 Cache (32KB, 1ns)
|
||||
- L2 Cache (256KB, 3ns)
|
||||
- L3 Cache (8MB, 12ns)
|
||||
- RAM (32GB, 100ns)
|
||||
- SSD (512GB, 10μs)
|
||||
```
|
||||
|
||||
### 3. Checkpoint Intervals
|
||||
Compares different checkpointing strategies:
|
||||
|
||||
```python
|
||||
# Strategies visualized:
|
||||
- No checkpointing (full memory)
|
||||
- √n intervals (optimal)
|
||||
- Fixed intervals (e.g., every 1000)
|
||||
- Exponential intervals (doubling)
|
||||
```
|
||||
|
||||
### 4. Cost Analysis
|
||||
Breaks down costs by component:
|
||||
|
||||
```python
|
||||
# Cost factors:
|
||||
- Memory cost (cloud storage)
|
||||
- Time cost (compute hours)
|
||||
- Total cost (combined)
|
||||
- Comparison across strategies
|
||||
```
|
||||
|
||||
### 5. Performance Metrics
|
||||
Radar chart showing multiple dimensions:
|
||||
|
||||
```python
|
||||
# Metrics evaluated:
|
||||
- Memory Efficiency (0-100%)
|
||||
- Speed (0-100%)
|
||||
- Fault Tolerance (0-100%)
|
||||
- Scalability (0-100%)
|
||||
- Cost Efficiency (0-100%)
|
||||
```
|
||||
|
||||
### 6. 3D Visualization
|
||||
Three-dimensional view of space-time-cost:
|
||||
|
||||
```python
|
||||
# Axes:
|
||||
- X: log₁₀(Space)
|
||||
- Y: log₁₀(Time)
|
||||
- Z: log₁₀(Cost)
|
||||
# Shows tradeoff surfaces for different strategies
|
||||
```
|
||||
|
||||
## Example Visualizations
|
||||
|
||||
Run comprehensive examples:
|
||||
|
||||
```bash
|
||||
python example_visualizations.py
|
||||
```
|
||||
|
||||
This creates four sets of visualizations:
|
||||
|
||||
### 1. Algorithm Comparison
|
||||
- Sorting algorithms (QuickSort vs MergeSort vs External Sort)
|
||||
- Search structures (Array vs BST vs Hash vs B-tree)
|
||||
- Matrix multiplication strategies
|
||||
- Graph algorithms with memory constraints
|
||||
|
||||
### 2. Real-World Systems
|
||||
- Database buffer pool strategies
|
||||
- LLM inference with KV-cache optimization
|
||||
- MapReduce shuffle strategies
|
||||
- Mobile app memory management
|
||||
|
||||
### 3. Optimization Impact
|
||||
- Memory reduction factors (10x to 1,000,000x)
|
||||
- Time overhead analysis
|
||||
- Cloud cost analysis
|
||||
- Breakeven calculations
|
||||
|
||||
### 4. Educational Diagrams
|
||||
- Williams' space-time bound
|
||||
- Memory hierarchy and latencies
|
||||
- Checkpoint strategy comparison
|
||||
- Cache line utilization
|
||||
- Algorithm selection guide
|
||||
- Cost-benefit spider charts
|
||||
|
||||
## Use Cases
|
||||
|
||||
### 1. Algorithm Design
|
||||
```python
|
||||
# Compare different algorithm implementations
|
||||
visualizer.current_n = 10**6 # 1 million elements
|
||||
visualizer.update_all_plots()
|
||||
|
||||
# See which strategy is optimal for your data size
|
||||
```
|
||||
|
||||
### 2. System Tuning
|
||||
```python
|
||||
# Analyze memory hierarchy impact
|
||||
# Adjust parameters to match your system
|
||||
hierarchy = MemoryHierarchy.detect_system()
|
||||
visualizer.hierarchy = hierarchy
|
||||
```
|
||||
|
||||
### 3. Education
|
||||
```python
|
||||
# Create educational visualizations
|
||||
from example_visualizations import create_educational_diagrams
|
||||
create_educational_diagrams()
|
||||
|
||||
# Perfect for teaching space-time tradeoffs
|
||||
```
|
||||
|
||||
### 4. Research
|
||||
```python
|
||||
# Export data for analysis
|
||||
visualizer._export_data(None)
|
||||
|
||||
# Creates JSON with all metrics and parameters
|
||||
# Saves high-resolution plots
|
||||
```
|
||||
|
||||
## Advanced Features
|
||||
|
||||
### Custom Strategies
|
||||
Add your own algorithms:
|
||||
|
||||
```python
|
||||
class CustomVisualizer(SpaceTimeVisualizer):
|
||||
def _get_strategy_metrics(self, n, strategy):
|
||||
if strategy == 'my_algorithm':
|
||||
space = n ** 0.7 # Custom space complexity
|
||||
time = n * np.log(n) ** 2 # Custom time
|
||||
cost = space * 0.1 + time * 0.01
|
||||
return space, time, cost
|
||||
return super()._get_strategy_metrics(n, strategy)
|
||||
```
|
||||
|
||||
### Animation Mode
|
||||
View algorithms in action:
|
||||
|
||||
```python
|
||||
# Launch animated view
|
||||
visualizer.create_animated_view()
|
||||
|
||||
# Shows:
|
||||
# - Processing progress
|
||||
# - Checkpoint creation
|
||||
# - Memory usage over time
|
||||
```
|
||||
|
||||
### Comparison Mode
|
||||
Side-by-side strategy comparison:
|
||||
|
||||
```python
|
||||
# Launch comparison view
|
||||
visualizer.create_comparison_view()
|
||||
|
||||
# Creates 2x2 grid comparing all strategies
|
||||
```
|
||||
|
||||
## Understanding the Visualizations
|
||||
|
||||
### Space-Time Curves
|
||||
- **Lower-left**: Better (less space, less time)
|
||||
- **Upper-right**: Worse (more space, more time)
|
||||
- **Gray region**: Theoretically impossible
|
||||
- **Green region**: Feasible implementations
|
||||
|
||||
### Memory Distribution
|
||||
- **Darker colors**: Faster memory (L1, L2)
|
||||
- **Lighter colors**: Slower memory (RAM, SSD)
|
||||
- **Bar width**: Amount of data in that level
|
||||
- **Numbers**: Access latency in nanoseconds
|
||||
|
||||
### Checkpoint Timeline
|
||||
- **Blocks**: Work between checkpoints
|
||||
- **Width**: Amount of progress
|
||||
- **Gaps**: Checkpoint operations
|
||||
- **Colors**: Different strategies
|
||||
|
||||
### Cost Analysis
|
||||
- **Log scale**: Costs vary by orders of magnitude
|
||||
- **Red outline**: Currently selected strategy
|
||||
- **Bar height**: Relative cost (lower is better)
|
||||
|
||||
## Tips for Best Results
|
||||
|
||||
1. **Start with your actual data size**: Use the slider to match your workload
|
||||
|
||||
2. **Consider all metrics**: Don't optimize for memory alone - check time and cost
|
||||
|
||||
3. **Test edge cases**: Try very small and very large data sizes
|
||||
|
||||
4. **Export findings**: Save configurations that work well
|
||||
|
||||
5. **Compare strategies**: Use the comparison view for thorough analysis
|
||||
|
||||
## Interpreting Results
|
||||
|
||||
### When to use O(√n) strategies:
|
||||
- Data size >> available memory
|
||||
- Memory is expensive (cloud/embedded)
|
||||
- Can tolerate 10-50% time overhead
|
||||
- Need fault tolerance
|
||||
|
||||
### When to avoid:
|
||||
- Data fits in memory
|
||||
- Latency critical (< 10ms)
|
||||
- Simple algorithms sufficient
|
||||
- Overhead not justified
|
||||
|
||||
## Future Enhancements
|
||||
|
||||
- Real-time profiling integration
|
||||
- Custom algorithm import
|
||||
- Collaborative sharing
|
||||
- AR/VR visualization
|
||||
- Machine learning predictions
|
||||
|
||||
## See Also
|
||||
|
||||
- [SpaceTimeCore](../core/spacetime_core.py): Core calculations
|
||||
- [Profiler](../profiler/): Profile your applications
|
||||
Reference in New Issue
Block a user