Working with Fast Linear Algebra (BLAS) Libraries
DaCe natively supports linear algebra operations (such as matrix multiplication) by using Basic Linear Algebra
Subprogram (BLAS) libraries. They integrate into existing programs when using, for example, the @
operator, or
calling NumPy functions such as numpy.dot
. In the resulting SDFG, Library Nodes will appear and can be then
expanded to use one of the fast BLAS libraries, for example Intel MKL
or NVIDIA CUBLAS.
By default, to maintain compatibility with all platforms, DaCe may expand library nodes to the native (unoptimized) SDFG implementation. This could be useful for manual optimization (e.g., to fuse algebraic operations together), but for most cases it is beneficial to call those libraries for their high-performance implementations.
The expansion target can be easily configured in library.blas.default_implementation
or manually on the graph,
for each node or for the entire blas
library globally. For specific nodes, modify their implementation
property.
For global configuration, change dace.libraries.blas.default_implementation
. You can also check if a specific BLAS
library is installed and can be found by DaCe using the is_installed
static method of each library environment.
The example below shows how you can check whether a library is installed inside a Python script, as well as change the setting:
from dace.libraries import blas
print('BLAS calls will expand by default to', blas.default_implementation)
if blas.IntelMKL.is_installed():
blas.default_implementation = 'MKL'
elif blas.cuBLAS.is_installed():
blas.default_implementation = 'cuBLAS'
elif blas.OpenBLAS.is_installed():
blas.default_implementation = 'OpenBLAS'
elif not blas.BLAS.is_installed():
# No BLAS library found, use the unoptimized native SDFG fallback
blas.default_implementation = 'pure'
Note
If a library is installed but cannot be found with the above method or during compilation, the environment variables
CPATH
/ LIBRARY_PATH
/ LD_LIBRARY_PATH
may be misconfigured. See Troubleshooting for more information.