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.
-mkl
Flag, das die Verwendung des Link Line Advisor in den meisten Fällen überflüssig machen sollte.