ATLAS to darmowy zamiennik BLAS / LAPACK, który po skompilowaniu dostosowuje się do komputera. MKL to biblioteka komercyjna dostarczana przez firmę Intel. Czy te dwie biblioteki są porównywalne pod względem wydajności, czy też MKL ma przewagę w niektórych zadaniach? Jeśli tak, które?
linear-algebra
libraries
performance
intel-mkl
Stefano Borini
źródło
źródło
Odpowiedzi:
MKL (od Intela) jest zoptymalizowany pod kątem procesorów Intela i prawdopodobnie ma tam „przewagę” w wielu przypadkach. Ale jest również „znany” z wyboru „najgorszych” ścieżek kodu dla procesorów AMD, jak opisano tutaj .
źródło
BLAS nie jest monolityczny. BLAS1 i BLAS2 mają ograniczoną przepustowość pamięci i niewiele można zrobić, aby przyspieszyć je poza oczywistością (rozwijanie pętli, blokowanie pamięci podręcznej na poziomie 2). BLAS3 jest bardziej interesujący, a prototypowym testem porównawczym jest tutaj mnożenie macierzy. Według mojej wiedzy GOTOBlas zawsze był tutaj wyraźnym zwycięzcą, zobacz na przykład to porównanie lub to i to uzasadnienie .
Minęło wiele lat i mamy projekt BLIS . Jest to najlepsza darmowa alternatywa dla MKL.
źródło
Profil, nie spekuluj! (działa również jako „Benchmark, nie spekuluj!” )
Nie można powiedzieć nic ogólnego, zależy to w dużej mierze od zadań, które chcesz wykonać (na przykład BLAS 1/2/3) i sprzętu, na którym się znajdujesz (oczywiście Intel MKL nie działa na procesorach ARM, ponieważ przykład; ale nawet wśród procesorów Intel można spodziewać się różnic w wydajności).
Inną rzeczą, o której warto wspomnieć, jest to, że AMD oferuje również biblioteki matematyczne dostosowane do ich procesorów, AMD Core Math Library . Nie jest tak bogaty w funkcje jak MKL Intela, ale zawiera BLAS.
źródło
Wcześniejsze odpowiedzi na to pytanie obejmowały większość istotnych punktów, ale chcę dodać jeden komentarz w tym zakresie:
Zespół MKL ma wyjątkową pozycję, aby wiedzieć o przyszłych zestawach instrukcji Intel i ich implementacjach w określonych procesorach. Ponadto mają dostęp do zastrzeżonych symulatorów procesorów i sprzętu przedprodukcyjnego, z którego nikt poza firmą Intel nie może korzystać. Tak więc MKL ma przewagę pod względem stopnia wiedzy na temat przyszłych produktów i ich zdobywania. Dlatego nie powinno dziwić, że produkują one lepsze implementacje BLAS niż ktokolwiek inny, przynajmniej na początku okresu istnienia produktu z nowymi funkcjami.
Z drugiej strony Intel był dość otwarty na temat zestawu instrukcji AVX-512 i udostępnił emulator Intel® Software Development Emulator (SDE), który pozwala programistom emulować instrukcje AVX-512 na procesorach, które nie obsługują ich natywnie. Z tego powodu nie będzie zaskakujące, jeśli wysokiej jakości implementacje BLAS typu open source będą dostępne dla procesorów Intel obsługujących AVX-512 na wczesnym etapie życia tych produktów.
Oczywiście, jak duża różnica ma posiadanie szczegółowych informacji o danym procesorze w porównaniu z podstawami algorytmów gęstej algebry liniowej, nie jest w pełni rozwiązana. Poniższy cytat rozwiązuje ten problem lepiej niż potrafię:
Pełne ujawnienie: Pracuję dla Intela.
źródło
Myślę, że główną różnicą między bibliotekami BLAS dostawców a bibliotekami BLAS typu open source jest czas potrzebny do obsługi najnowszych funkcji sprzętowych przez oprogramowanie typu open source.
Ponieważ BLAS jest szeroko stosowany, w interesie dostawcy jest obsługa najnowszych funkcji sprzętowych. Weźmy na przykład rozszerzenia wektorowe AVX Intela, które zostały wprowadzone wraz z procesorem „sand-bridge” w styczniu 2011 r. MKL miał obsługę AVX jeszcze zanim procesor był dostępny, ale dopiero niedawno ATLAS (pod koniec 2011 r.) Zaczął wdrażać obsługę AVX .
Ponadto, jeśli Twoja aplikacja naprawdę potrzebuje wydajności i zanim zaczniesz porównywać różne biblioteki BLAS lub zaczniesz hakować w celu optymalizacji czegokolwiek: profiluj swoją aplikację. Często ludzka intuicja nie jest bardzo skutecznym predyktorem profilującym, przynajmniej wiem, że moja nie! Zamiast więc losowo optymalizować czas, profiluj swoją aplikację i systematycznie podchodź do każdego wąskiego gardła.
źródło