# An Uplink Channel Estimator Using a Dedicated Instruction Set for 5G Small Cells
## 4 Design and Acceleration of Instruction Set
### Efficiency and Performance Comparison
\begin{table}
\begin{tabular}{c c c c c} \hline \hline \multirow{2}{*}{**Functional Module**} & **Average Cycles per** & **Average Cycles** & **Average Cycles** & **Improvement** \\  & **RE in This Paper** & **per RE in AVX-512** & **per RE in Neon** & \\ \hline LS estimation & \(26/4=6.5\) & \(52/4=13\) & \(52/4=13\) & \(50\%\) \\ F-domain Wiener interpolation & \(30/8=3.75\) & \(30/8=3.75\) & \(48/8=6\) & \(37.5\%\) \\ T-domain Wiener interpolation & \(33/6=5.5\) & \(33/6=5.5\) & \(41/6=6.83\) & \(19.5\%\) \\ F-domain linear interpolation & \(18/8=2.25\) & \(18/8=2.25\) & \(18/8=2.25\) & \(0\) \\ F-domain 2 nd-order interpolation & \(33/8=4.125\) & \(33/8=4.125\) & \(49/8=6.125\) & \(32.7\%\) \\ T-domain linear interpolation & \(25/6=4.17\) & \(25/6=4.17\) & \(33/6=5.5\) & \(24.2\%\) \\ T-domain 2 nd-order interpolation & \(49/6=8.17\) & \(49/6=8.17\) & \(49/6=8.17\) & \(0\) \\ \hline \hline \end{tabular}
\end{table} 
Table 4: Comparison of instruction efficiency for the channel estimation module. and the algorithm itself are very simple. There is no chance of acceleration from the point of view of data parallelism or subcarrier parallelism. In the second-order interpolation in the frequency domain, because the eight pilot subcarriers are divided into four groups, the general vector processing instruction set that only uses the parallel subcarriers can only use four sets of parallel corresponding complex multipliers on one instruction. In this study, data parallelism is used to make one instruction use six multipliers for computation on the same subcarrier, so the instruction improvement is 32.7%. ```
1:8 CM1R dst [G2:X0-X7], src1[G0:X15] src0[G1:X0-X7];//1 st extrapolation,G0:X15=2
2:8 CSSC dst [G3:X0-X7], src1[G2:X0-X7] src0[G0:X0-X7];
3:8 CM1R dst [G6:X0-X7], src1[G0:X15] src0[G5:X0-X7];
4:8 CSSC dst [G7:X0-X7], src1[G6:X0-X7] src0[G4:X0-X7];
5:Repeat N/4 8 [// Interpolation loop body. Four H values of 9 pilots are token at a time and interpolate 8 subcarriers.Each subcarrier needs to be interpolated with 8 H values.Then if the total number of subcarriers is N, the number of cycles is 2*N/8. 6://[G1:X0-X3]: Crosscorrelation matrix generated by look-up table; [G0:X0-X7]:Autocorrelation matrix generated by look-up table; [G1:X8-X11] SNR; [G1:X12]zero. The tap group is calculated once for every four pilot subcarriers, so twice for each RB. 7:16 CP16 c dst [G2:X0-X7], src1[G1:X8,X12,X12,X8,X9,X12,X12,X9] src0[G0:X0-X7];//Calculate the autocorrelation matrix add SNR parameter diagonal matrix then give [a b c d] //Instruction 7-11 is to get the inverse matrix part of two 2 \(\times\) 2 autocorrelation matrices. 8:4:2 CMSC2C dst [G3:X0-X1], src1[G2:X2,X3,X6,X7] src0[G2:X0,X1,X4,X5];//Calculate the determinant ad-bc of the inverse of the autocorrelation matrix. The inverse matrix is obtained every four pilot subcarriers, and the two inverse programs are parallel. 9:2:4 QY4 dst [G4:X0-X7] src0[G2:X0-X7];//The cofactor of calculating the inverse of autocorrelation matrix [d -b;< a]
10:1 RLUT1R dst [G3:X0], src0[G3:X0];//get 1/(ad-bc)
11:1 RLUT1R dst [G3:X1], src0[G3:X0];
12:4 CM1C dst [G5:X0-X7], src1[G3:X0,X1] src0[G4:X0-X7];//get the autocorrelation matrix
13:2:2 MM1 dst [G6:X0-X3], src1[G5:X0-X7] src0[G1:X0-X3];//multiply the autocorrelation and crosscorrelation matrix to get the tap
14:Repeat 4 2[//This is the interpolation part. The last two instructions need to be looped four times in this small loop. That is, 8 instructions are required to complete a large cycle of interpolation. 15://the G7-G10 group is used to store the H values of the nine pilot subcarriers, and the G11-G14 group is used to store the H values of the eight subcarriers to be interpolated. //Each cycle corresponds to an H value of a subcarrier, and four H values of 8 subcarriers are obtained in four cycles.