2015-05-22 13 views
6

Biblioteki matematyczne są bardzo często porównywane na podstawie FLOPS. Jakie informacje są mi przekazywane, gdy wyświetlana jest fabuła FLOPS vs size z zestawami punktów dla kilku różnych bibliotek matematycznych?Dlaczego biblioteki matematyczne są często porównywane przez FLOPS?

FLOPS jako miara wydajności miałoby dla mnie więcej sensu, gdyby porównanie dotyczyło dwóch implementacji tego samego algorytmu lub tego samego oprogramowania na dwóch różnych elementach sprzętowych. Nie rozumiem, dlaczego jest to odpowiedni lub popularny sposób porównywania rzeczy takich jak mnożenie matrycy macierzowej.

Czy implikacja polega na tym, że algorytmy leżące u podstaw są prawie takie same, a kod, który najszybciej przenosi jednostki zmiennoprzecinkowe, minimalizując narzut?

Przykłady obfitują.

http://eigen.tuxfamily.org/index.php?title=Benchmark

https://code.google.com/p/blaze-lib/wiki/Benchmarks

https://software.intel.com/en-us/articles/a-simple-example-to-measure-the-performance-of-an-intel-mkl-function

Z drugiej strony, te Lapack i Armadillo benchmarki używać czas bezwzględny dla danej operacji, która ma większy sens dla mnie.

http://www.netlib.org/lapack/lug/node71.html

http://arma.sourceforge.net/speed.html

Stosowna:

What is FLOP/s and is it a good measure of performance?

Odpowiedz

2

Zazwyczaj ludzie porównują bibliotek matematycznych, aby wybrać ten, który minimalizuje czas pracy swojego programu. W przypadku takich testów należy rozważyć dwie rzeczy: wydajność bibliotek na danym wejściu i czy dane wejściowe są reprezentatywne dla danego przypadku użycia.

Jeśli przyjmiemy, że każde zadanie (np. Skalowanie wektorowe) wymaga takiej samej liczby operacji zmiennoprzecinkowych, wówczas można oczekiwać, że biblioteka z największą liczbą FLOPS zakończy się jako pierwsza.

Założenie, że każda biblioteka wykonuje taką samą liczbę operacji zmiennoprzecinkowych jest w niektórych przypadkach uzasadnione. Ale jest całkowicie możliwe, że dwie biblioteki będą wymagały innej liczby operacji zmiennoprzecinkowych dla tego samego zadania (np. Mnożenie macierzy macierzy). W takim przypadku biblioteka może wykonać mniej FLOPS, ale zakończyć w krótszym czasie niż biblioteka, która wykonuje więcej FLOPS. Dlatego w takich przypadkach można racjonalnie spojrzeć na całkowity czas wykonywania. Jeśli autorzy publikują porównania w FLOPS, oznacza to, że wierzą, że każda biblioteka wykonuje taką samą liczbę operacji; lub po prostu dzielą liczbę operacji wymaganych do teoretycznego ukończenia zadania przez całkowity czas wykonywania (który jest również powszechny). Chcesz sprawdzić metodologię testów porównawczych.

Celem porównania wydajności (np. FLOPS) z rozmiarem jest ułatwienie ludziom zrozumienia wydajności na reprezentatywnych danych wejściowych dla ich przypadku użycia. Jeśli wiesz, że będziesz miał wiele małych wektorów, takich jak mniej niż 10, to nie obchodzi cię, jak szybko biblioteka jest dla wektorów wielkości 1 gb i nie chcesz, aby te dane wejściowe miały wpływ na porównanie.

Ogólnie rzecz biorąc, liczenie FLOPS było popularne (może po części dlatego, że jest łatwe do wyjaśnienia matematykom). Przypuszczam, że jedną z motywacji jest to, że powiedzenie "możesz sprzedać rozmiar = 10 wektor przy 10000 FLOPS, ale rozmiar = 100 wektor przy 100 FLOPS" jest łatwiejsze do strawienia niż powiedzenie "możesz przeskalować wektor o wielkości = 10 w 0.001 sekund, ale rozmiar = 100 wektorów w ciągu 1 sekundy."Jeśli zgłosisz całkowite środowisko uruchomieniowe, prawdopodobnie będziesz chciał przeskalować rozmiar wejściowy do porównań:

1

W komputerach o wysokiej wydajności jednym z celów jest często wykorzystanie jak największej ilości sprzętu w jak najkrótszym czasie. minimalizuje czas spędzany (przez ludzi lub inne wrażliwe na czas systemy) na oczekiwanie.W dużych obiektach komputerowych koszty operacyjne (zużywana energia, siła robocza do konserwacji itd.) są często - w przybliżeniu - stałe w czasie, więc czas na obliczenia przekładają się bezpośrednio na dolną linię (pieniądze zapłacone za wykonanie obliczeń):

FLOPS podaje miarę tego, jak dobrze algorytm wykorzystuje procesor, pomiar FLOPS dla algorytmu podzielony przez liczbę FLOPS, które CPU w stanie dać ułamek między 0 i 1. Im bliżej 1, tym bardziej efektywnie algorytm wykorzystuje CPU, co przekłada się na "bang for money" na tego typu CPU (tj. algorytm wytwarza rozwiązanie szybciej, więc koszt netto jest mniejszy).

Wynik dotyczy procesora (zestaw instrukcji) i algorytmu. Ale jeśli algorytm daje mały wynik na konkretnym procesorze, to nie wykorzystuje on dobrze tego procesora. To może napędzać wybór różnych algorytmów, różnych ustawień kompilacji (np. Optymalizować inaczej lub wybierać różne instrukcje), wybrać farmę serwerów, na której algorytm będzie działał bardziej efektywnie itd. Itd. Dla dużych obliczeń, które są wykonywane wielokrotnie (codziennie) korzyści kosztowe mogą być duże w przypadku korzystania z algorytmu, który efektywnie wykorzystuje CPU w porównaniu do tego, który wykorzystuje go nieefektywnie.