[LINUX] Table de symboles de teintures MKL (table de liaison PLT / procédure)

introduction

Lié à https://qiita.com/cielavenir/items/93d2b5b057bfe1383670.

Supposons que vous ayez A.so et B.so, où A est lié statiquement à libmkl_rt et B est lié statiquement à libblas. A ce moment, normalement, si A.so et B.so sont liés dynamiquement [^ 1], A devrait utiliser libmkl_rt et B devrait utiliser libblas pour l'implémentation BLAS. Cependant, en réalité, si A charge MKL après avoir appelé la fonction BLAS de MKL, B utilisera également MKL pour l'implémentation BLAS. Cela peut poser un problème si (peu probable) B dépend du comportement d'implémentations BLAS autres que MKL [^ 2]. Cependant, il ne semble pas y avoir de solution de contournement cette fois ...

démo

Le package binaire pour scipy / spatial / qhull.so est lié à libopenblas, mais l'exécution de ce qui suit dans un environnement LD_DEBUG = "libs symboles" peut charger le dgetrf / dgetrs / dgecon de MKL (au lieu de libopenblas): Être observé. Notez que ʻimport scipy` ne charge pas scipy / spatial / qhull.so.

#!/usr/bin/python
import numpy
import scipy  # this does not guarantee scipy.spatial safety.
print(numpy.dot([[1,2]],[[3],[4]]))
points = numpy.random.rand(30, 2)  # 30 random points in 2-D

import ctypes
n=ctypes.c_int(3)
alpha=ctypes.c_double(3)
beta=ctypes.c_double(-2)
A=(ctypes.c_double*9)(1,2,9,8,10,-5,3,8,-1)
B=(ctypes.c_double*9)(9,3,-8,8,11,6,3,2.3,1)
C=(ctypes.c_double*9)(3,8,6,3,4,1,1.2,8,-2)
# this CDLL loads so using RTLD_LOCAL
ctypes.CDLL("libmkl_rt.so").cblas_dgemm(102,111,111,n,n,n,alpha,A,n,B,n,beta,C,n)
print(list(C))

print '=== check dgetrf/dgetrs/dgecon below ==='
from scipy.spatial import ConvexHull
hull = ConvexHull(points)

en conclusion

J'ai eu quelques réflexions, et quand j'ai ajouté un modèle qui utilise plusieurs modules dans la démo précédente, j'ai pu le reproduire (car il utilise l'attribut constructeur), il peut être reproduit simplement en le chargeant sans appeler de fonction). Est-ce que libmkl_rt ne fait pas que dlopen rouvrir pour observer le comportement ...?

Recommended Posts

Table de symboles de teintures MKL (table de liaison PLT / procédure)