|
| 1 | +# O4-Mini AlgoTune Benchmark Report |
| 2 | + |
| 3 | +## Executive Summary |
| 4 | + |
| 5 | +This report documents a comprehensive evaluation of OpenAI's o4-mini model using the AlgoTune benchmark suite. The experiment ran 8 algorithmic optimization tasks through 100 iterations of evolutionary code optimization using the OpenEvolve framework. o4-mini demonstrated strong optimization capabilities, achieving significant performance improvements on 7 out of 8 tasks, with particularly impressive results on convolution and matrix projection problems. |
| 6 | + |
| 7 | +**Key Results:** |
| 8 | +- **Success Rate**: 87.5% (7/8 tasks improved) |
| 9 | +- **Major Breakthroughs**: 182x speedup on convolution, 1.85x on PSD projection |
| 10 | +- **Average Improvement**: 26.4x across successful tasks (excluding the 182x outlier: 1.08x average) |
| 11 | +- **Execution Time**: ~16-17 hours total |
| 12 | +- **Model Performance vs Gemini Flash 2.5**: Competitive optimization quality, 10x slower execution |
| 13 | + |
| 14 | +## Detailed Results |
| 15 | + |
| 16 | +### Task Performance Summary |
| 17 | + |
| 18 | +| Task | o4-mini Speedup | Gemini Flash 2.5 | Status | Improvement | |
| 19 | +|------|-----------------|-------------------|--------|-------------| |
| 20 | +| **convolve2d_full_fill** | **182.114x** | 163.773x | ✅ Complete | +11.2% vs Gemini | |
| 21 | +| **psd_cone_projection** | **1.849x** | 1.068x | ✅ Complete | +73.1% vs Gemini | |
| 22 | +| **polynomial_real** | 1.084x | 1.067x | ✅ Complete | +1.6% vs Gemini | |
| 23 | +| **eigenvectors_complex** | 1.070x | 1.113x | ✅ Complete | -3.9% vs Gemini | |
| 24 | +| **lu_factorization** | 1.062x | 1.055x | ✅ Complete | +0.7% vs Gemini | |
| 25 | +| **affine_transform_2d** | 1.023x | 1.018x | ✅ Complete | +0.5% vs Gemini | |
| 26 | +| **fft_cmplx_scipy_fftpack** | 1.018x | 1.021x | ✅ Complete | -0.3% vs Gemini | |
| 27 | +| **fft_convolution** | 0.951x | 0.962x | ❌ Failed (80 iters) | -1.1% vs Gemini | |
| 28 | + |
| 29 | +## Major Optimizations Found |
| 30 | + |
| 31 | +### 1. FFT-Based Convolution (182x Speedup) |
| 32 | + |
| 33 | +**Task**: convolve2d_full_fill |
| 34 | +**Original Algorithm**: Direct 2D convolution O(n⁴) |
| 35 | +**Evolved Algorithm**: FFT-based convolution O(n²log n) |
| 36 | + |
| 37 | +**Before (Initial Code):** |
| 38 | +```python |
| 39 | +def solve(self, problem): |
| 40 | + a, b = problem |
| 41 | + result = signal.convolve2d(a, b, mode=self.mode, boundary=self.boundary) |
| 42 | + return result |
| 43 | +``` |
| 44 | + |
| 45 | +**After (Evolved Code):** |
| 46 | +```python |
| 47 | +def solve(self, problem): |
| 48 | + """Compute full 2D convolution using FFT (zero-padded).""" |
| 49 | + a, b = problem |
| 50 | + # ensure contiguous arrays for optimal FFT performance |
| 51 | + a, b = np.ascontiguousarray(a), np.ascontiguousarray(b) |
| 52 | + return fftconvolve(a, b, mode=self.mode) |
| 53 | +``` |
| 54 | + |
| 55 | +**Key Improvements:** |
| 56 | +- Replaced `signal.convolve2d` with `fftconvolve` (FFT-based algorithm) |
| 57 | +- Added memory layout optimization with `ascontiguousarray` |
| 58 | +- Achieved 182x performance improvement |
| 59 | +- This optimization reduces computational complexity from O(n⁴) to O(n²log n) |
| 60 | + |
| 61 | +### 2. Optimized PSD Cone Projection (1.85x Speedup) |
| 62 | + |
| 63 | +**Task**: psd_cone_projection |
| 64 | +**Optimization**: Matrix computation efficiency and eigenvalue handling |
| 65 | + |
| 66 | +**Before (Initial Code):** |
| 67 | +```python |
| 68 | +A = np.array(problem["A"]) |
| 69 | +eigvals, eigvecs = np.linalg.eig(A) |
| 70 | +eigvals = np.maximum(eigvals, 0) |
| 71 | +X = eigvecs @ np.diag(eigvals) @ eigvecs.T |
| 72 | +return {"X": X} |
| 73 | +``` |
| 74 | + |
| 75 | +**After (Evolved Code):** |
| 76 | +```python |
| 77 | +# load matrix and ensure float64 |
| 78 | +A = np.array(problem["A"], dtype=np.float64, order='C', copy=False) |
| 79 | +eigvals, eigvecs = np.linalg.eigh(A, UPLO='L') |
| 80 | +if eigvals[0] >= 0: |
| 81 | + return {"X": A} |
| 82 | +np.maximum(eigvals, 0, out=eigvals) |
| 83 | +# reconstruct via GEMM with scaled eigenvectors |
| 84 | +X = eigvecs @ (eigvecs.T * eigvals) |
| 85 | +return {"X": X} |
| 86 | +``` |
| 87 | + |
| 88 | +**Key Improvements:** |
| 89 | +- Used `eigh` instead of `eig` for symmetric matrices (faster, more stable) |
| 90 | +- Added early return for already-positive matrices |
| 91 | +- In-place eigenvalue clamping with `out=eigvals` |
| 92 | +- Optimized matrix reconstruction avoiding `np.diag` |
| 93 | +- Memory layout optimization with `order='C'` and `copy=False` |
| 94 | +- Achieved 1.85x performance improvement |
| 95 | + |
| 96 | +### 3. Minor Optimizations |
| 97 | + |
| 98 | +**Other successful tasks showed modest improvements (1.8% to 8.4%) through:** |
| 99 | +- Memory layout optimizations |
| 100 | +- Algorithm parameter tuning |
| 101 | +- Numerical stability improvements |
| 102 | +- Code structure optimizations |
| 103 | + |
| 104 | +## Execution Time Analysis |
| 105 | + |
| 106 | +### Runtime Comparison |
| 107 | +- **Total Benchmark Time**: ~16-17 hours |
| 108 | +- **Average per Task**: ~2 hours per task |
| 109 | +- **Gemini Flash 2.5**: ~2 hours total (~15 minutes per task) |
| 110 | +- **Speed Ratio**: o4-mini is approximately **10x slower** than Gemini Flash 2.5 |
| 111 | + |
| 112 | +### Iteration Timing |
| 113 | +- **Average time per iteration**: ~1.2 minutes |
| 114 | +- **Checkpoint frequency**: Every 10 iterations |
| 115 | +- **Data sizes**: Adjusted to ~60 seconds per single evaluation (×16 for full evaluation) |
| 116 | + |
| 117 | +## Failure Analysis |
| 118 | + |
| 119 | +### fft_convolution Task Failure |
| 120 | + |
| 121 | +**Status**: Stopped at iteration 80/100 with 0.951x speedup (5% degradation) |
| 122 | + |
| 123 | +**Possible Causes:** |
| 124 | +1. **Task Complexity**: This task may have limited optimization potential |
| 125 | +2. **Model Limitations**: o4-mini may struggle with certain algorithmic patterns |
| 126 | +3. **Local Minima**: Evolution may have gotten stuck in suboptimal solutions |
| 127 | +4. **Evaluation Issues**: Possible timeout or stability issues during evaluation |
| 128 | + |
| 129 | +**Comparison**: Gemini Flash 2.5 also struggled with this task (0.962x speedup) |
| 130 | + |
| 131 | +**Analysis**: Both models found this task challenging, suggesting it may be inherently difficult to optimize or have fundamental constraints preventing improvement. |
| 132 | + |
| 133 | +## Model Comparison: o4-mini vs Gemini Flash 2.5 |
| 134 | + |
| 135 | +### Optimization Quality |
| 136 | +- **Major Wins for o4-mini**: 2 tasks significantly better |
| 137 | +- **Overall Performance**: Comparable optimization discovery |
| 138 | +- **Success Rate**: o4-mini 87.5% vs Gemini 100% |
| 139 | + |
| 140 | +### Execution Efficiency |
| 141 | +- **Speed**: Gemini 10x faster |
| 142 | +- **Resource Usage**: o4-mini more computationally intensive |
| 143 | +- **Reliability**: Gemini more consistent completion |
| 144 | + |
| 145 | +### Optimization Discovery |
| 146 | +- **FFT Convolution**: Both models found this key optimization |
| 147 | +- **Novel Optimizations**: o4-mini found better PSD projection approach |
| 148 | +- **Consistency**: Gemini more reliable across all tasks |
| 149 | + |
| 150 | +## Technical Configuration |
| 151 | + |
| 152 | +### Model Settings |
| 153 | +```yaml |
| 154 | +model_name: "openai/o4-mini" |
| 155 | +temperature: 0.7 |
| 156 | +max_tokens: 4000 |
| 157 | +diff_model: true |
| 158 | +num_iterations: 100 |
| 159 | +``` |
| 160 | +
|
| 161 | +### Evolution Parameters |
| 162 | +- **Database Type**: MAP-Elites with island-based evolution |
| 163 | +- **Population**: 16 islands with periodic migration |
| 164 | +- **Evaluation**: 3-stage cascade (validation, performance, comprehensive) |
| 165 | +- **Timeout**: 200 seconds per evaluation stage |
| 166 | +
|
| 167 | +### Data Scaling |
| 168 | +Tasks were scaled to run ~60 seconds per single evaluation: |
| 169 | +- **affine_transform_2d**: data_size = 100 |
| 170 | +- **convolve2d_full_fill**: data_size = 5 |
| 171 | +- **eigenvectors_complex**: data_size = 25 |
| 172 | +- **fft_cmplx_scipy_fftpack**: data_size = 95 |
| 173 | +- **fft_convolution**: data_size = 125 |
| 174 | +- **lu_factorization**: data_size = 25 |
| 175 | +- **polynomial_real**: data_size = 500 |
| 176 | +- **psd_cone_projection**: data_size = 35 |
| 177 | +
|
| 178 | +## Key Insights |
| 179 | +
|
| 180 | +### Strengths of o4-mini |
| 181 | +1. **Algorithmic Discovery**: Successfully identified major algorithmic improvements (FFT convolution) |
| 182 | +2. **Optimization Depth**: Found sophisticated optimizations beyond simple parameter tuning |
| 183 | +3. **Mathematical Insight**: Demonstrated understanding of mathematical properties (symmetric matrices) |
| 184 | +4. **Code Quality**: Generated clean, well-commented optimized code |
| 185 | +
|
| 186 | +### Limitations |
| 187 | +1. **Execution Speed**: 10x slower than Gemini Flash 2.5 |
| 188 | +2. **Reliability**: One task failed to complete |
| 189 | +3. **Consistency**: More variable performance across tasks |
| 190 | +
|
| 191 | +### Comparison with Gemini Flash 2.5 |
| 192 | +- **Optimization Quality**: Roughly equivalent, with o4-mini having slight edge on major breakthroughs |
| 193 | +- **Speed**: Gemini significantly faster |
| 194 | +- **Reliability**: Gemini more consistent |
| 195 | +- **Cost-Effectiveness**: Gemini better for production use |
| 196 | +
|
| 197 | +## Conclusions |
| 198 | +
|
| 199 | +o4-mini demonstrated strong algorithmic optimization capabilities in the AlgoTune benchmark, successfully discovering major performance improvements including the critical FFT convolution optimization. While significantly slower than Gemini Flash 2.5, it showed competitive and sometimes superior optimization quality. |
| 200 | +
|
| 201 | +**Recommendations:** |
| 202 | +1. **For research/exploration**: o4-mini suitable for deep optimization discovery |
| 203 | +2. **For production**: Gemini Flash 2.5 better balance of speed and quality |
| 204 | +3. **For hybrid approach**: Use o4-mini for initial discovery, Gemini for iteration |
| 205 | +
|
| 206 | +**Future Work:** |
| 207 | +- Test with longer iteration counts to see if o4-mini can overcome the fft_convolution failure |
| 208 | +- Experiment with different temperature settings for better exploration |
| 209 | +- Investigate optimization potential beyond 100 iterations |
| 210 | +
|
| 211 | +--- |
| 212 | +
|
| 213 | +**Experiment Details:** |
| 214 | +- **Date**: August 15, 2025 |
| 215 | +- **Total Runtime**: ~16-17 hours |
| 216 | +- **Framework**: OpenEvolve v2.0 |
| 217 | +- **Tasks**: AlgoTune benchmark suite (8 tasks) |
| 218 | +- **Iterations**: 100 per task |
| 219 | +- **Model**: openai/o4-mini |
0 commit comments