## 2 Matrix Sign Function-Based Solvers
(More details on the platforms are offered in Table 1.) \begin{table}
\begin{tabular}{c c c c c c c} \hline \hline \multirow{2}{*}{**Platform**} & \multirow{2}{*}{**Processors**} & \multirow{2}{*}{**\#proc.**} & \multicolumn{2}{c}{**\#cores**} & \multirow{2}{*}{**Frequency**} & \multirow{2}{*}{**L2 cache**} & \multirow{2}{*}{**Memory**} \\  & & & **(per proc.)** & & **(GHz)** & & **(MB)** \\ \hline \multirow{3}{*}{Kepler} & Intel i7-3930 & 1 & 6 & 3.2 & 1.5 & 24 \\  & NVIDIA K20 & 1 & 2,496 & 0.71 & – & 5 \\ \cline{1-1}  & Intel E5440 & 2 & 4 & 2.83 & 6 & 16 \\ \cline{1-1}  & NVIDIA S2050 & 4 & 448 & 1.15 & – & (3 \(\times\) 4)12 \\ \hline \hline \end{tabular}
\end{table} 
Table 1: Hardware platforms employed in the experimental evaluation. A multi-threaded version of the Intel MKL library (version 10.3.9) provides the necessary LAPACK and BLAS kernels for the CPU and NVIDIA CUBLAS (version 5.0) for the GPU computations. Experiments are performed in double precision arithmetic. Table 2 shows the results obtained for the Lyapunov equation solvers. (Hereafter, the subindices, cpu, gpu, or mgpu, identify the target platform as CPU, hybrid CPU-GPU and hybrid multi-GPU, respectively). The use of the GPU reports important gains for all the problems evaluated. The difference between the performance of GECLNC_gpu and GECLNC_cpu grows with the problem dimension. In particular, GECLNC_gpu is 30% faster than GECLNC_cpu for the solution of the smallest problem, but 4.4\(\times\) faster for FLOW_METER, the largest problem tackled. The comparison among GECLNC_gpu and GECLNC_mgpu shows that the multi-GPU kernel offers high performance for smaller problems, which decays for larger problems. This can be explained by two main characteristics of the NVIDIA devices employed. On the one hand, the number of computational units in NVIDIA K20 is larger than the aggregated number of computational cores in the four GPUs of NVIDIA S2050. This difference, of about 500 computational units, renders NVIDIA K20 more suitable for large problems. On the other hand, the cores in NVIDIA S2050 work at a higher frequency, which is a key factor for moderate/small problems. As a result, GECLNC_mgpu is 25% and 12% faster than GECLNC_gpu for benchmarks STEEL\({}_{S}\) and STEEL\({}_{L}\), respectively, but 12% slower for FLOW_METER. In summary, the GPU-based variants reported gains between 1.85\(\times\) and 4.4\(\times\). Table 3 summarizes the results for the solution of algebraic Riccati equations. Note that the codes to build the matrix, \(H_{0}\) (column 2), and solve the over-determined system (column 3) are similar for the three implementations evaluated. Columns 4-9 report the time dedicated to compute the sign function and the total execution time for each variant. In this case, GECRSG_gpu obtains the best result for problems STEEL\({}_{S}\) and STEEL\({}_{L}\), and clearly outperforms the CPU and multi-GPU implementation. The large computational cost of the solution of the ARE and the large number of computational units in the NVIDIA K20 explains this behavior. The storage requirements of problem FLOW_METER exceed the memory in NVIDIA K20, and consequently, the corresponding equation cannot be solved with GECRSG_gpu. On the other hand, the solution of this benchmark is accelerated by a factor of 4.5\(\times\) using GECRSG_mgpu. Finally, Table 4 shows the execution time obtained for the solution of differential Riccati equations using the matrix sign function-based Lyapunov solver. We solve the DREs in the time interval \([0,1]\), using a step size of length \(\triangle t=0.1\). Two values are reported for each implementation: the time to compute the sign function (Fsign) and the total execution time. Most of the time, approximately 97% \begin{table}
\begin{tabular}{c c c c} \hline \hline  & **GECLNC\_cpu** & **GECLNC\_gpu** & **GECLNC\_mgpu** \\ \hline STEEL\({}_{S}\) & 1.35 & 0.99 & 0.73 \\ STEEL\({}_{L}\) & 26.92 & 8.01 & 6.79 \\ FLOW\_METER & 154.30 & 34.86 & 40.53 \\ \hline \hline \end{tabular}
\end{table}