Ich verwende Intel MKL für BLAS und den Intel MKL Link Line Advisor, um Hilfe bei den Befehlszeilenoptionen zu erhalten.
Der Advisor bietet Optionen für die statische, dynamische und einzelne dynamische Bibliothek. Was bedeuten diese Begriffe?
Es gab diesbezüglich zahlreiche Beiträge zu SO, aber alle konzentrierten sich eher auf die Entwicklung von Software als auf wissenschaftliche / mathematische Codes. ( Dieser war besonders nützlich)
- Wie sind diese Begriffe für Parallel Computing relevant?
- Ist einer "besser" als der andere? (Ich weiß, dass das Bessere genauer definiert werden müsste, aber ich weiß noch nicht, wie es geht)
- Was wird häufiger verwendet und warum?
- Was muss der Programmierer beim Verknüpfen beachten?
-mkl
Flag, das die Verwendung des Link Line Advisor in den meisten Fällen überflüssig machen sollte.-static
und verknüpft es dynamisch, wenn Sie dies nicht tun. Unter dem Gesichtspunkt der Benutzerfreundlichkeit ist es auf jeden Fall viel besser.Antworten:
Die Begriffe statische Verknüpfung und dynamische Verknüpfung stehen nicht in direktem Zusammenhang mit parallelem Rechnen, obwohl seit einiger Zeit bekannt ist, dass das dynamische Laden (im Gegensatz zum Laden einer statisch kompilierten ausführbaren Datei) auf Netzwerkdateisystemen aufgrund der hohen Kapazität nicht gut skaliert werden kann Laden von Metadaten durch den dynamischen Loader, der Ladepfade nach Zielbibliotheken durchsucht.
Es ist schwierig, allgemeine Aussagen darüber zu treffen, ob statische oder dynamische Bibliotheken im Hochleistungsrechnen besser sind. Für die meisten Supercomputer-Anwendungen ist es sicherlich einfacher und bevorzugt, statisch zu verknüpfen. Warum ist das? Bei der aktuellen Generation von Supercomputern wird normalerweise nur ein Job pro Knoten ausgeführt, wodurch die Vorteile eines verringerten Speicherverbrauchs aufgrund gemeinsam genutzter Bibliotheken erheblich reduziert werden. Darüber hinaus sind wissenschaftliche Computercodes in Bezug auf Sprachfunktionen oder Programmdesign in der Regel nicht sehr ausgefeilt und verwenden nur selten Sprachfunktionen, die dynamisch geladen werden müssen (z. B. Plugin-Module). Dynamische Bibliotheken haben die zusätzliche Schwierigkeit, unter Betriebssystemen viel weniger portabel zu sein als statische Bibliotheken.
Infolgedessen verwenden die meisten HPC-Systeme eine statische Kompilierung, sofern verfügbar. Statische Bibliotheken werden als schneller, einfacher zu installieren und zu warten und im Allgemeinen robuster angesehen. HPC-Codes, die auf Python basieren, sind eine der Ausnahmen, aber sie unterliegen immer noch den Leistungsproblemen, die mit dem dynamischen Laden verbunden sind (mehrere Benutzer von scicomp arbeiten gerade an diesem Problem!).
Wenn Sie sich für statische oder dynamische Verknüpfungen entscheiden, müssen Sie berücksichtigen, wie und wo Ihr Code bereitgestellt wird, ob sich die zugrunde liegenden Bibliotheken wahrscheinlich ändern oder verschieben und welche Leistungsmerkmale Ihr Netzwerkdateisystem aufweist. Sie sollten auch prüfen, ob Sie eine dynamische Verknüpfung benötigen , entweder durch eine Bibliotheksabhängigkeit oder um mit einer dynamischen Skriptsprache wie Python zusammenzuarbeiten.
Single Dynamic Library ist ein Intel-spezifischer Begriff. Es bezieht sich auf das Packen ihrer dynamischen Bibliotheken in eine einzelne Metabibliothek, um den Verknüpfungsprozess zu vereinfachen. Wenn Sie eine dynamische Verknüpfung mit Intel-Bibliotheken verwenden, wird dieses Formular wahrscheinlich bevorzugt, es sei denn, Sie tun etwas Kompliziertes.
quelle
Dynamic : 0:42.92
Static : 0:42.93
Single Dynamic : 0:42.97
gemittelt über 1000 Werte.