Używam Intel MKL dla BLAS i używam Intel MKL Link Line Advisor, aby uzyskać pomoc w zakresie opcji wiersza poleceń.
Doradca udostępnia opcje dla biblioteki statycznej, dynamicznej i pojedynczej biblioteki dynamicznej. Co oznaczają te terminy?
Było wiele postów na ten temat, ale wszystkie koncentrowały się na tworzeniu oprogramowania, a nie kodów naukowych / matematycznych. ( Ten był szczególnie przydatny)
- W jaki sposób te warunki odnoszą się do przetwarzania równoległego?
- Czy jedno jest „lepsze” od drugiego? (Wiem, że lepiej byłoby precyzyjniej zdefiniować, ale na razie nie wiem, jak to zrobić)
- Co jest używane częściej i dlaczego?
- Co programista musi wziąć pod uwagę podczas łączenia?
-mkl
flagę, która powinna wyeliminować potrzebę korzystania z doradcy linii łącza w większości przypadków.-static
i dynamicznie łączy go, jeśli tego nie zrobisz. W każdym razie jest to zdecydowanie lepsze z punktu widzenia łatwości użytkowania.Odpowiedzi:
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.
źródło
Dynamic : 0:42.92
Static : 0:42.93
Single Dynamic : 0:42.97
uśredniono ponad 1000 wartości.