HomeCommunityTools, Software and IDEs blog
August 24, 2023

Windows Release of Arm Performance Libraries

Arm are proud to announce that we have now released our first version of Arm Performance Libraries (Arm PL) for Windows 11 devices. 

By Chris Goodyer

Share
Reading time 4 minutes

Arm are proud to announce that we have now released our first version of Arm Performance Libraries (Arm PL) for Windows 11 devices.  This release, numbered 23.08, covers key libraries for fast, efficient and accurate computation of linear algebra, both dense and sparse, and Fast Fourier Transforms (FFTs).  By releasing this for Windows we are very happy to be able to bring our optimized implementations to a new ecosystem for acceleration On Arm.

The functionality provided in Arm PL comes from the following common numerical requirements that developers frequently need:

  • BLAS: Matrix and vector linear algebra for fundamental vector and matrix operations, like multiplication, dot products and triangular solving.
  • LAPACK: More complex linear algebra including matrix factorization and other solving functions, eigenvalues and eigenvector calculation and matrix inversion routines. This version matches the latest version of LAPACK 3.11.0.
  • FFTs: Full support for in-place and out-of-place real and complex Fast Fourier Transforms using the FFTW API.
  • Sparse linear algebra: Support including optimized functions for matrix-vector, matrix-matrix and solving triangular sparse systems.
  • Batched linear algebra: Useful where there are many small cases to be solved at once.

Since the BLAS, LAPACK and FFTW interfaces are well used, standard APIs this means that any application you are building on Windows will be able to link to Arm PL and benefit from its acceleration.  Full documentation is available online for all functions, whether calling from C/C++ or Fortran.  Use of both MSVC, the Microsoft Compiler, and LLVM are enabled through this release.  The library also has a set of example programs provided at installation time that can be used, not only to verify you can link correctly, but also to demonstrate how to use our custom sparse interfaces.

Downloading and installing Arm PL 23.08

In order to get Arm Performance Libraries simply head over to our Download page.  Choose the "Download - Windows Latest version: 23.08" option and accept the EULA.  No payment or further licence is needed, simply install and you will be good to go.

To install Arm Performance Libraries:

  1. Unpack and extract the zip file:
  2. Locate the downloaded zip file in the Windows File Explorer.
  3. Double click on the file, and then click on the "Extract all" button at the top of the File Explorer.
  4. In the pop-up window, select a location to unpack Arm Performance Libraries into on your system, and click on Extract.

Finally you need to update your environment variables:

  1. Using the Windows Search feature, search for "System Properties". Click on "Best Match".
  2. In the System Properties window click on "Environment Variables".
  3. Add a new environment variable called ARMPL_DIR, which should have the value

<install location>\arm-performance-libraries_23.08\armpl_23.08

where <install location> is the location into which you unpacked Arm Performance Libraries.

  • Next, add %ARMPL_DIR%\bin  to the list of directories in the PATH environment variable.

Linking software to use Arm PL

Within Arm Performance Libraries we have packaged together many variants to allow users the flexibility to build the software products they want.  This means we provide options for:

  • Libraries linked dynamically to the Microsoft Universal C Runtime library (UCRT) (i.e. compatible with cl builds using /MD):
  • OR Libraries linked statically to the Microsoft Universal C Runtime library (UCRT) (i.e. compatible with cl builds using /MT):

More information about the Windows UCRT may be found here

  • Static libraries
    • OR dynamic libraries
  • Serial implementations
    • OR versions with multithreading using OpenMP
  • 32-bit integer interfaces (called "lp64")
    • OR 64-bit integer interfaces (called "ilp64") 

Full details of the naming of these libraries is given in the RELEASE_NOTES file included with the release. 

In addition to the Arm PL libraries above we provide some runtime libraries which they depend upon. These are the OpenMP dynamic runtime libraries and the Fortran runtime libraries, for /MT and /MD builds.  Linking the Fortran runtime libraries in explicitly is needed as some components of Arm PL (namely LAPACK) are written predominantly in Fortran.

Examples

An example of using the dynamic Arm PL with 32-bit integer interfaces, OpenMP and /MD UCRT linkage from within an MSVC Command Prompt is as follows:

Compile:

cl /nologo /MD /c /I%ARMPL_DIR%\include_lp64 /Focode.obj code.c

Link:

cl /nologo /MD code.obj /Feapp.exe %ARMPL_DIR%\lib\armpl_lp64_mp.dll.lib
     %ARMPL_DIR%\lib\omp.dll.lib
     %ARMPL_DIR%\lib\FortranRuntime.lib %ARMPL_DIR%\lib\FortranDecimal.lib

If linking to a serial build of Arm PL there is no need to include the OpenMP runtime in the linking step.  Here is an example of linking to the static 32-bit integer library with /MT UCRT linkage:

Compile:

cl /nologo /MT /c /I%ARMPL_DIR%\include_lp64 /Focode.obj code.c

Link:

 cl /nologo /MT code.obj /Feapp.exe %ARMPL_DIR%\lib\libarmpl_lp64.lib
      %ARMPL_DIR%\lib\libFortranRuntime.lib
      %ARMPL_DIR%\lib\libFortranDecimal.lib

What's next?

The Windows releases of Arm Performance Libraries will be continued as part of the regular release cycle.  This aims for two major releases each year with the 23.10 being the next scheduled release in October. Getting feedback from users will help us plan all future work so don't hesitate to get in contact through our user forum.


Log in to like this post
Share

Article text

Re-use is only permitted for informational and non-commercial or personal use only.

placeholder