- 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.
1.9 KiB
1.9 KiB
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=16achieved the minimum runtime of 0.180668 seconds. - Action: The optimal block size was automatically applied to code/makefile.
- Correctness Verification: Correctness was verified via
make testusingBLOCKSIZE=16, and all derivative computations passed numeric tolerance checks successfully without any issues.