test_optimizations.cu contains all the PwPA CUDA kernels tested with different optimization strategies.
Optimization technics used:
- AoS to SoA re-arrangement of coefficient data structure, to avoid unconcealed global accesses.
- Unrolling of For-loops.
- Data Reuse with per-thread registers arrays, to hide warp stalls due to pipe math throttlling of FMA executions.
- Re-writing if-branches to avoid thread divergence.
- Shared Memory.
To evaluate the kernels w.r.t different metrics Nvidia Nsight Compute is used.
The results of running test_optimizations.cu are shown below in simple speedup charts.
A simple unrolling is the most effective optimization for this small kernel for both partitions and degree input parameters, respectively using AoS and SoA coefficients' data structures.
"AoS Basic Unrolling" and "SoA Basic Unrolling" are the kernels integrated in this extension.
