The IDL bindings for the low-level MAGMA routines are automatically generated wrappers for the standard LAPACK interface, but GPULib also offers a higher-level routine mimicking the
LA_ routines present in the IDL library. GPUINVERT is comparable to LA_INVERT, inverting a non-singular matrix in a single call:
dinverse = gpuInvert(da, lhs=dinverse)While these routines document their technique for performing their operations, they do not require much user knowledge of the underlying techniques used. More high-level routines similar to the
LA_are planned for future GPULib versions.
Calling the low-level routines directly in MAGMA requires more knowledge of the mathematical algorithms and a bit more cumbersome notation. For example, the following example shows how to call the MAGMA version of SGELS:
status = gpusgels((byte('N')), $ m, n, nrhs, $ da->_getHandle(), lda, $ db->_getHandle(), ldb, $ work, lwork, $ info)SGELS solves overdetermined or underdetermined real linear systems using a QR or LQ factorization of a matrix of full rank. This low-level operation has options for performing multiple solves in a call and operating on the transpose.
The calling syntax for the MAGMA routines is in the API documentation for GPULib as well as in
lib/magma_routines.h in the GPULib distribution.