2012-09-30 11 views
7

Jak mogę obliczyć FLOPS mojej aplikacji? Jeśli mam całkowitą liczbę wykonanych instrukcji, mogę podzielić ją przez czas wykonania. Ale jak policzyć liczbę wykonanych instrukcji?Obliczanie FLOPS (operacje zmiennoprzecinkowe na sekundę)

Moje pytanie jest ogólne, a odpowiedź na każdy język jest bardzo cenna. Ale szukam rozwiązania dla mojej aplikacji, która jest rozwijana przez C/C++ i CUDA.

Nie wiem, czy tagi są prawidłowe, popraw mnie, jeśli się mylę.

+0

prawdopodobny duplikat [Jak obliczyć Gflops z jądra] (http://stackoverflow.com/questions/7875607/how-to-calculate-gflops-of-a-ernel) – talonmies

+0

Znam to pytanie! Moje pytanie jest ogólne. Jak obliczyć FLOPS? Nawet wielordzeniowe. Odpowiedź może również pomóc w mojej sprawie "CUDA". – ahmad

+3

Opublikowaliśmy, w jaki sposób narzędzia NVIDIA mogą być używane do zbierania FLOPów w [Obliczanie osiągniętej przepustowości i FLOPS ...] (http://stackoverflow.com/questions/12539300/calculating-achieved-bandwidth-and-flops-gflops-and -valuate-cuda-kernel-perfor). Dla x86 istnieje kilka bibliotek Linuksa do obliczania FLOPów. Monitor wydajności x86 obsługuje zliczanie FLOP, ale musisz przeczytać instrukcję, aby zrozumieć szczegóły (instrukcje spekulacyjne, co się liczy, ...) –

Odpowiedz

7

Co zrobić, jeśli liczba operacji zmiennoprzecinkowych nie jest łatwa do modelowania, to wyprodukować dwa pliki wykonywalne: jeden, który jest wersją produkcyjną i daje mi czas wykonania, i instrumentowy, który zlicza wszystkie operacje zmiennoprzecinkowe podczas ich wykonywania (na pewno będzie to powolne, ale to nie ma znaczenia dla naszego celu). Następnie mogę obliczyć wartość FLOP/s, dzieląc liczbę operacji zmiennoprzecinkowych z drugiego pliku wykonywalnego przez czas od pierwszego.

Może to być prawdopodobnie zautomatyzowane, ale do tej pory nie miałem takiej potrzeby.

6

Powinieneś matematycznie modelować, co zostało zrobione z twoimi danymi. Izoluj jedną iterację pętli. Następnie policz wszystkie proste wartości zmiennoprzecinkowe, mnożenia, podziały itd. Na przykład: y = x * 2 * (y + z*w) to 4 operacje zmiennoprzecinkowe. Pomnóż wynikową liczbę przez liczbę iteracji. Rezultatem będzie liczba instrukcji, których szukasz.

+0

Dobre dla spójnych gałęzi sterowania i deterministycznych. Nie ma zastosowania w kodzie z gałęziami warunkowymi zależnymi od wejściowych (dynamiczny czas pracy określa liczbę wykonanych FP). – ahmad

+0

czy ignorujesz instrukcje warunkowe, np. (I MySchizoBuddy