incomp-flame-post/tuning_results.md
ignis 78fbedc9a1
All checks were successful
CI Test Suite / run-tests (push) Successful in 1m14s
Deploy Documentation / build-and-deploy (push) Successful in 56s
feat: implement transpose block size auto-tuning and benchmark
- Added benchmark_transpose.f90 to measure blocked transpose performance.
- Added tune_blocksize.py to auto-detect grid sizes, benchmark valid block size candidates, and apply the optimal value.
- Updated makefile to support benchmark targets and default BLOCKSIZE=16 based on autotuning.
- Saved tuning results and system specifications to tuning_results.md.
2026-06-05 13:25:17 +00:00

40 lines
1.9 KiB
Markdown

# Transpose Block Size Auto-Tuning Results
This document contains the performance tuning results for the 2D transpose block size (`BLOCKSIZE`) in the compact finite difference schemes, along with the detailed system specification on which the benchmark was performed.
## 1. System Specifications
| Parameter | Value |
| :--- | :--- |
| **CPU Model** | Intel(R) Xeon(R) CPU E5-2696 v2 @ 2.50GHz |
| **CPU Topology** | 1 Socket / 12 Cores / 24 Threads |
| **Installed RAM** | 62 GiB |
| **OS / Kernel** | Ubuntu 24.04.4 LTS (Noble Numbat) / Linux 6.8.0-111-generic x86_64 |
| **MPI Compiler** | GNU Fortran (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0 (via `mpif90`) |
## 2. Tuning Configuration
- **Grid Resolution**: NX=512, NY=256, NZ=256
- **Tuning Mode**: Isolated performance benchmark (`benchmark_transpose`)
- **Benchmark Iterations**: 3 per candidate block size
- **Target Operations**: Blocked 2D transpose (`ddx`) in compact schemes
## 3. Autotuning Results
The autotuner evaluated all mathematically valid divisors of NY ($256$) that are $\ge 4$:
| Block Size | Compile Time (s) | Avg Run Time (s) | Relative Difference | Status |
| :---: | :---: | :---: | :---: | :---: |
| 4 | 2.46 | 0.276665 | +53.1% | SUCCESS |
| 8 | 2.47 | 0.206591 | +14.3% | SUCCESS |
| **16** | **2.59** | **0.180668** | **Best** | **SUCCESS** |
| 32 | 2.42 | 0.190675 | +5.5% | SUCCESS |
| 64 | 2.42 | 0.239433 | +32.5% | SUCCESS |
| 128 | 2.44 | 0.291365 | +61.3% | SUCCESS |
| 256 | 2.44 | 0.355095 | +96.5% | SUCCESS |
## 4. Conclusion & Action
- **Optimal Block Size**: `BLOCKSIZE=16` achieved the minimum runtime of **0.180668 seconds**.
- **Action**: The optimal block size was automatically applied to [code/makefile](file:///home/ignis/workspace/incomp-flame-post/code/makefile).
- **Correctness Verification**: Correctness was verified via `make test` using `BLOCKSIZE=16`, and all derivative computations passed numeric tolerance checks successfully without any issues.