Visible to Intel only — GUID: GUID-8672C441-6165-4E29-A771-CAB2A0F07652

Visible to Intel only — GUID: GUID-8672C441-6165-4E29-A771-CAB2A0F07652

## Coding Techniques

To improve performance, properly align arrays in your code. For more details, see Example of Data Alignment. Additional conditions can improve performance for specific function domains.

### Data Alignment and Leading Dimensions

To improve performance of your application that calls Intel® oneAPI Math Kernel Library (oneMKL), align your arrays on 64-byte boundaries and pad the leading dimensions, keeping in mind the following recommendations:

`(64 / sizeof(float))`, which is equal to 16 elements. Similarly, for double-precision real data or single-precision complex data, the leading dimension must be a multiple of 8 elements, while for double-precision complex data, the leading dimension should be a multiple of 4 elements.

### LAPACK Packed Routines

The routines with the names that contain the letters `HP, OP, PP, SP, TP, UP` in the matrix type and storage position (the second and third letters respectively) operate on the matrices in the packed format (see LAPACK "Routine Naming Conventions" sections in the Intel® oneAPI Math Kernel Library (oneMKL) Developer Reference). Their functionality is strictly equivalent to the functionality of the unpacked routines with the names containing the letters`HE, OR, PO, SY, TR, UN` in the same positions, but the performance is significantly lower.

If the memory restriction is not too tight, use an unpacked routine for better performance. In this case, you need to allocate `N`^{2}/2 more memory than the memory required by a respective packed routine, where `N` is the problem size (the number of equations).

For example, to speed up solving a symmetric eigenproblem with an expert driver, use the unpacked routine:

```
call dsyevx(jobz, range, uplo, n, a, lda, vl, vu, il, iu, abstol, m, w, z, ldz, work, lwork, iwork, ifail, info)
```

where `a` is the dimension ` lda-by-n`, which is at least

`N`

^{2}elements,

instead of the packed routine:

```
call dspevx(jobz, range, uplo, n, ap, vl, vu, il, iu, abstol, m, w, z, ldz, work, iwork, ifail, info)
```

where `ap` is the dimension `N`*(`N`+1)/2.

Product and Performance Information |
---|

Performance varies by use, configuration and other factors. Learn more at www.Intel.com/PerformanceIndex. Notice revision #20201201 |

**Parent topic:**Other Tips and Techniques to Improve Performance