- 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.
40 lines
1.9 KiB
Markdown
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.
|