Zum Beispiel kann ich Atlas, OpenBlas, MKL auf meinem Ubuntu 14.04 zur gleichen Zeit installiert haben und zwischen ihnen ohne Neukompilierung Caffe wechseln?Ist es möglich, zwischen BLAS-Bibliotheken zu wechseln, ohne das Programm neu zu kompilieren?
Antwort
Sicher, haben Sie sie installiert haben, und auf Ubuntu/Debian Ausgabe Befehl
update-alternatives --config libblas.so.3
Sie werden Liste von Alternativen und nummeriert leicht
Verbindung zwischen ihnen hin- und herschalten könnte: https://wiki.debian.org/DebianScience/LinearAlgebraLibraries
Eine andere Frage, was passiert, wenn ich OpenBlas auf normale Weise und mit dem Flag USE_OPENMP = 1 erstelle? Kann ich zwischen ihnen wechseln? d. h. kann ich zwischen Bibliotheksmodifikationen/-versionen wechseln? – mrgloom
@mrgloom ja, aber sie sollten verschiedene Pakete sein, die die gleiche Alternative bieten. Dann wird 'update-alternatives' über sie wissen –
Aber wie kann ich sie als mehrere Pakete bauen?Zum Beispiel, wenn ich OpenBlas von Quelle über 'make' und dann' make install PREFIX = dein_Installationsverzeichnis1' baue und dann mit 'make USE_OPENMP = 1' und' make install PREFIX = dein_Installationsverzeichnis2' versuch, kann 'update-alternatives' meine Builds finden in diesen Ordnern oder wie kann ich zwei verschiedene Builds der gleichen lib im ubuntu Standard lib Verzeichnis mit 'make install' installieren? – mrgloom
Ja, Sie können. Sie müssen nur dynamische Bibliotheksverknüpfung verwenden. Die libblas.so.3
ist eine weiche Anbindung an /etc/alternatives/libblas.so.3
Was wiederum zeigt auf die BLAS
Bibliothek Implementierung
Zum Beispiel, wenn Sie Atlas
(sudo apt-get install libatlas3-base
) installieren:
/usr/lib/libblas.so.3 -> /etc/alternatives/libblas.so.3
/etc/alternatives/libblas.so.3 -> /usr/lib/atlas-base/atlas/libblas.so.3
während nach Openblas
(sudo apt-get install libopenblas-base
) installieren:
/usr/lib/libblas.so.3 -> /etc/alternatives/libblas.so.3
/etc/alternatives/libblas.so.3 -> /usr/lib/openblas-base/libblas.so.3
Natürlich können Sie Ihren eigenen weichen Link zu Ihrem verwenden Bibliothek erstellt.
Sie können dies auch tun, ohne die systemweiten Einstellungen zu ändern, z. B. indem Sie die gewünschte Bibliothek zu den Umgebungsvariablen LD_PRELOAD
oder LD_LIBRARY_PATH
hinzufügen. Die erste Bibliothek auf diesem Pfad ist diejenige, mit der die Symbole aufgelöst werden.
Zum Beispiel könnten Sie mit
LD_PRELOAD=/path/to/blas/lib.so ./my_executable_using_caffe
ausführen können Sie sehen, dass dieser Ansatz im Rahmen eines Benchmarking-Skripts für verschiedene Implementierungen äußerst nützlich wäre, da er nicht die Benchmark-Umgebung selbst nicht beeinträchtigt. Zum Beispiel (in bash):
my_libraries=/path/to/blas1.so /path/to/blas2.so
for lib in $my_libraries
do
LD_PRELOAD=${lib} ./my_executable_using_caffe
done
Dieser Ansatz basierte auf dynamische Verknüpfung, gilt für jeden anderen Shared Library Ihr Programm gegen kompiliert wird.
@Shai, um verschiedene BLAS-Bibliotheken mit Caffe zu benchmarken. – mrgloom
das ist eine interessante Aufgabe. Wenn Sie irgendwelche Schlussfolgerungen ziehen, wäre es schön, wenn Sie sie hier teilen. – Shai