[LINUX] MKL färbt Symboltabelle (PLT / Prozedur-Verknüpfungstabelle)

Einführung

Bezogen auf https://qiita.com/cielavenir/items/93d2b5b057bfe1383670.

Angenommen, Sie haben A.so und B.so, wobei A statisch mit libmkl_rt und B statisch mit libblas verknüpft ist. Zu diesem Zeitpunkt sollte A normalerweise libmkl_rt und B libblas für die BLAS-Implementierung verwenden, wenn A.so und B.so dynamisch verknüpft sind [^ 1]. In der Realität verwendet B jedoch MKL auch für die BLAS-Implementierung, wenn A MKL nach dem Aufrufen der BLAS-Funktion von MKL lädt. Dies kann ein Problem sein, wenn (unwahrscheinlich) B vom Verhalten anderer BLAS-Implementierungen als MKL abhängt [^ 2]. Diesmal scheint es jedoch keine Problemumgehung zu geben ...

Demo

Das Binärpaket für scipy / räumlich / qhull.so ist mit libopenblas verknüpft. Wenn Sie jedoch Folgendes in einer Umgebung mit LD_DEBUG = "libs symbole" ausführen, kann MKLs dgetrf / dgetrs / dgecon (anstelle von libopenblas) geladen werden: Untersucht werden. Beachten Sie, dass import scipy scipy / räumlich / qhull.so nicht lädt.

#!/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)

abschließend

Ich hatte einige Gedanken und als ich in der vorherigen Demo ein Muster hinzufügte, das mehrere Module verwendet, konnte ich es reproduzieren (da es das Konstruktorattribut verwendet), kann es einfach durch Laden reproduziert werden, ohne eine Funktion aufzurufen). Macht libmkl_rt nicht einfach das dlopen reopen, um das Verhalten zu beobachten ...?

Recommended Posts

MKL färbt Symboltabelle (PLT / Prozedur-Verknüpfungstabelle)