Pojęcia łączenie statyczne i łączenie dynamiczne nie są bezpośrednio związane z obliczeniami równoległymi, chociaż od pewnego czasu wiadomo, że ładowanie dynamiczne (w przeciwieństwie do ładowania statycznie skompilowanego pliku wykonywalnego) nie skaluje się dobrze w sieciowych systemach plików z powodu dużego obciążenia ładowanie metadanych spowodowane przez dynamiczne ładowanie przeszukujące ścieżki ładowania dla bibliotek docelowych.
Trudno jest sformułować ogólne stwierdzenia, czy biblioteki statyczne czy dynamiczne są lepsze w obliczeniach o wysokiej wydajności. Z pewnością w przypadku większości aplikacji superkomputerowych jest to prostsze i preferowane jest łączenie statyczne. Dlaczego to? W bieżącej generacji superkomputerów zwykle działa tylko jedno zadanie na węzeł, co znacznie zmniejsza wszelkie korzyści wynikające ze zmniejszonego zużycia pamięci dzięki współdzielonym bibliotekom. Ponadto naukowe kody komputerowe zwykle nie są zbyt skomplikowane pod względem funkcji językowych lub projektu programu i rzadko korzystają z funkcji językowych wymagających dynamicznego ładowania (takich jak moduły wtyczek). Biblioteki dynamiczne mają dodatkową trudność polegającą na tym, że są znacznie mniej przenośne w systemach operacyjnych niż biblioteki statyczne.
W wyniku tego większość systemów HPC korzysta z kompilacji statycznej, jeśli jest dostępna. Biblioteki statyczne są postrzegane jako szybsze, łatwiejsze w instalacji i utrzymaniu oraz ogólnie bardziej niezawodne. Kody HPC oparte na Pythonie są jednym z wyjątków od tego, ale nadal podlegają problemom z wydajnością związanym z dynamicznym ładowaniem (kilku użytkowników scicomp aktualnie pracuje nad tym problemem!).
Wybierając łączenie statyczne vs. dynamiczne, należy rozważyć sposób i miejsce wdrożenia kodu, możliwość zmiany lub przeniesienia bazowych bibliotek oraz charakterystyki wydajności sieciowego systemu plików. Powinieneś także ocenić, czy potrzebujesz dynamicznego linkowania, albo poprzez zależność od biblioteki, albo do współpracy z dynamicznym językiem skryptowym, takim jak Python.
Pojedyncza biblioteka dynamiczna jest terminem specyficznym dla Intela. Odnosi się do upakowania ich bibliotek dynamicznych w jednej meta-bibliotece, aby uprościć proces łączenia. Jeśli będziesz używać dynamicznego łączenia z bibliotekami Intel, ta forma jest prawdopodobnie preferowana, chyba że robisz coś skomplikowanego.
-mkl
flagę, która powinna wyeliminować potrzebę korzystania z doradcy linii łącza w większości przypadków.