## 5 Results and Analysis
### SpMV Performance  
In this subsection, we evaluate the performance of SURAA in terms of three main performance metrics: (1) Throughput (GFLOP/s), (2) Average Speedup, and (3) Effective Memory Bandwidth (GB/s). We first define these three performance metrics in the this section.  
Next, the throughput and speedup are evaluated in Section 5.3.1; it provides a detailed comparative analysis of SURAA including individual performance for all matrices in the dataset, average performance over all the matrices, best performance for any single matrix in the dataset, and a detailed discussion of comparison of SURAA with each of the other seven techniques (see the paragraph headings, WPK1 & WPK2, HYB, etc.).  
The aggregate throughput and speedup are analyzed in Section 5.3.2. The effective memory bandwidth performance is compared in Section 5.3.3.  
The throughput in GFLOP/s is calculated based on the effective flop count in an SpMV execution, as given below in Equation (2):  
\[throughput\ (\mathrm{GFLOP/s})=\frac{2\times nnz}{1.0e^{9}\times time}. \tag{2}\]  
In the above equation, \(nnz\) denotes the total number of non-zero elements in the given matrix and \(time\) denotes the execution time in seconds.  
Figure 6: The normalized mean and the standard deviation of the matrices in the used Benchmark suite  
\begin{table}
\begin{tabular}{l l c c c c c c} \hline
**Struct** & **Matrix** & **Rows** & **Columns** & \(nnz\) & **Density (\%)** & **Symmetry** & **Problem Domain** \\ \hline \hline \multirow{2}{*}{} & _Andrews_ & 60 000 & 60 000 & 760 154 & \(2.11\times 10^{-2}\) & symmetric & computer graphics \\ \hline \multirow{2}{*}{} & _ASIC\_680K_ & 682 862 & 682 862 & 2 638 997 & \(5.65\times 10^{-4}\) & unsymmetric & circuit simulation \\ \hline \hline \multirow{2}{*}{} & _flickr_ & 820 878 & 820 878 & 9 837 214 & \(1.45\times 10^{-3}\) & unsymmetric & directed graph \\ \hline \multirow{2}{*}{} & _torso1_ & 116 158 & 116 158 & 8 516 500 & \(6.31\times 10^{-2}\) & unsymmetric & 2D/3D \\ \hline \multirow{2}{*}{} & _Sio2_ & 155 331 & 155 331 & 11 283 503 & \(4.67\times 10^{-2}\) & symmetric & Quantum Chemistry \\ \hline \multirow{2}{*}{} & _Ga3 As3H12_ & 61 349 & 61 349 & 5 970 947 & \(1.58\times 10^{-1}\) & symmetric & Quantum Chemistry \\ \hline \multirow{2}{*}{} & _av41092_ & 41 092 & 41 092 & 1 683 902 & \(9.97\times 10^{-2}\) & unsymmetric & 2D/3D \\ \hline \end{tabular}
\end{table}
Table 3: _Cont_.  
The average speedup is calculated using the standard method depicted in Equation (3)  
\[averagespedup=\frac{\sum_{i=1}^{26}\frac{\text{SURAA}_{i}}{reference\_ scheme_{i}}}{26}. \tag{3}\]  
Here, in the above equation, \(SURAA_{i}\) indicates the throughput in GFLOP/s for each matrix from our benchmark suite of 26 matrices and \(reference\_scheme_{i}\) indicates the throughput (in GFLOP/s) of the reference scheme against which we make comparison, i.e., CSR, HYB, BSR, CSR5, SELL-P, WPK1, or WPK2.  
The effective memory bandwidth in GB/s is calculated as in Equation (4):  
\[e\_bandwidth\ (\text{GB/s})=\frac{brw}{1.0e^{9}\times time}. \tag{4}\]  
In the above equation, \(brw=bytes\_read+bytes\_written\), with \(bytes\_read\) and \(bytes\_written\) representing the number of bytes read and written during a single kernel execution time.