Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[C++] Program do testowania CPU, HDD.

BOSSMAN26 09 Mar 2010 06:00 2583 11
  • #1 09 Mar 2010 06:00
    BOSSMAN26
    Poziom 16  

    Potrzebuję pomysłu na program w C++. Program ma testować CPU i HDD a ponadto ma być mobilny, multi-platformowy. Pomocy! Nie mam pomysłu, jak się do tego zabrać. Odnośnie CPU myślałem nad liczbą PI. Wyliczanie jej z jakąś dużą dokładnością po przecinku, pomiar czasu przed rozpoczęciem tego zadani i po jego wykonaniu, nadanie programowi jak najwyższego priorytetu (jak zmienić priorytet wykonywania w win ? ).

    Poprawiłem tytuł. - arnoldziq

    0 11
  • #2 09 Mar 2010 09:43
    arnoldziq
    Moderator Programowanie

    BOSSMAN26 napisał:
    ma być mobilny multi platformowy.
    Co to według kolegi oznacza? Różne systemy operacyjne? Ma działać na każdym systemie? Różne kompilatory C++? Proszę sprecyzować.
    BOSSMAN26 napisał:
    jak zmienić priorytet wykonywania w win
    Skoro program ma być multi... to czemu kolega ogranicza się do Windows?

    0
  • #3 09 Mar 2010 16:20
    BOSSMAN26
    Poziom 16  

    tak ma działać na różnych systemach win linux i platformach AMD Intel, pytałem o windowsa bo w linuksie coś niecoś wiem jak zmienić priorytet wykonywania konkretnego zadania. Najbardziej interesują mnie pomysły jak ugryźć temat .. W jaki sposób testować w/w podzespoły ?

    0
  • #5 09 Mar 2010 19:05
    BOSSMAN26
    Poziom 16  

    raczej wydajność, poprawność nie była by zła ale na początek starczy wydajność

    0
  • #6 09 Mar 2010 21:04
    Dżyszla
    Poziom 42  

    To obawiam się, że program będzie dawał wyniki rózne na róznych systemach, co raczej wykluczy jego multiplatformowość.

    Generalnie dla testowania CPU musisz zainteresować się assemblerem.
    W przypadku dysku pamiętaj, że możesz nie mieć wyłączności na dostęp do niego.

    Priorytet: SetThreadPriority z WinAPI (jeśli dobrze pamiętam)

    Jak testować:
    CPU - ilość operacji w czasie na ALU przy danej szerokości, tak samo z FPU, dalej z wykorzystaniem unkcji takich jak MMX, SSE itp.. Nalezy zwrócić uwagę, aby testy były wykonywane z pominięciem pamięci zewnętrznej.

    HDD - tu sprawa ma się prościej, bo można przetestować prędkość odczytu/zapisu ale... na poziomie niższym, niż plikowy! Tak, abyś mógł wskazywać obszar dysku do testowania. Oczywiście test zapisu nie może odbywać się na obszarach używanych. Dodatkowo możesz wykonać test Random Seek, test stop/start.

    0
  • #7 11 Mar 2010 14:36
    BOSSMAN26
    Poziom 16  

    może jakiś konkretny przykład jak to mniej więcej ma wyglądać najchętniej w cpp...

    CPU
    zmiennoprzecinkowe(liczby rzeczywiste) operacje na sekundę - przykłady takich operacji zapisanych w postaci kodu w cpp:
    Odnośnie pamięci procesora - aby korzystać z niej to muszę ograniczyć się do zmiennych które zmieszczą z cache L1 ? szerokość magistrali czyli 32 lub 64 bit ?

    pomiar czasu jaką komendą w jakiej bibliotece ?:(aktualna godzina, minuta, sekunda, milisekunda) + zapis do pliku

    _____________________________________________________________________
    HDD
    jakieś pomysły ? coś co nie wymaże zawartości dysku a pozwoli określić prędkość zapisu i odczytu na nim ?

    jak określić miejsce w którym mają być wykonywane operacje ? muszę podać nr klastra i sektora ?

    P O M O C Y ! ! !

    0
  • #8 28 Mar 2010 19:15
    BOSSMAN26
    Poziom 16  

    Wymyśliłem :-) że odczytam uprzednio utworzony plik tekstowy i zmierzę czas wykonania tej operacji co ostatecznie podzielę przez wielkość tego pliku. Mam tylko mały kłopot o ile poradziłem sobie z zapisem, to coś odczyt nie działa prawidłowo otrzymuję nieprawdopodobne wyniki odczyt jest wykonywany w 0 sekund lub jeśli dodam operacje wyświetlenia zawartości pliku na konsolę wtedy czas oczywiście się wydłuża ale wtedy otrzymuje czas wypisania zawartości pliku na konsolę, a nie jego odczytu z HDD - jakieś pomysły jak to naprawić i jak odczytywać automatycznie wielkość pliku z pod wskazanego adresu ? fstat chyba ale jak to działa ?

    0
  • #9 28 Mar 2010 22:05
    Dżyszla
    Poziom 42  

    Zarzuć ten pomysł. Na taki pomiar będą miały wpływ:
    - Umieszczenie danych w buforze dysku (fizyczny cache dysku)
    - Umieszczenie danych w buforze systemowym (cache dysku w systemie)
    - Aktualne położenie głowicy
    - Fragmentacja pliku
    - Położenie pliku na dysku
    - System plików
    - Rozmiar klastra dysku
    - Współbieżność z innymi operacjami dostępu do dysku
    - Operacje odczytu wysokiego poziomu, sposób ich przeprowadzania.

    O mierzeniu do tego czasu wyświetlania nie wspomnę...

    Przeczytaj raz jeszcze mój poprzedni post.

    0
  • #10 28 Mar 2010 23:50
    jabu74 - ekspert
    Poziom 19  

    Witaj

    Jeżeli chodzi o CPU (ALU + FPU) to proponuję napisanie benchmarka rysującego fraktala w pamięci (nie widoczne na ekranie) a potem zrzut tego obrazka do pliku graficznego w formacie PBM, BMP itp. To są proste formaty - upraszczając na początku pliku podaje się identyfikator formatu zapisu, rozdzielczość potem dla każdego piksela 3 kolejne bajty dla składowych R0, G0, B0, R1, G1, B1, ....

    Napisałem kiedyś takiego benchamrka w czystym ANSI C (bez zmiany kodu można skompilować na dowolnym systemie i dowolnym procesorze)

    Rozmiar fraktala dasz np. 6400x6400 pikseli to będzie się liczył kilkanaście, kilkadziesiąt sekund (plik ponad 117 MB).

    Potem możesz rozbudować program o więcej wątków (ich liczba równa liczbie rdzeni w procesorze) i dzielisz cały obraz na tyle części ile masz wątków i każdy rdzeń liczy na osobnym wątku swoją część obrazu. Na końcu sklejasz to do kupy. Częściowo mi się to udało zrobić w środowisku MinGW ale tu masz ograniczenie tylko do Windowsa. Nie byłem zadowolony z końcowego efektu, który był dość dziwny tzn. wątek który pierwszy zaczynał liczyć dłużej liczył niż drugi wątek i to o parę sekund. Nie wiem czemu - zaprzestałem bawić się gniotem bo to było poniżej krytyki

    Powodzenia

    0
  • #11 30 Mar 2010 17:49
    trol.six
    Poziom 30  

    jabu74 - ekspert napisał:
    Rozmiar fraktala dasz np. 6400x6400 pikseli to będzie się liczył kilkanaście, kilkadziesiąt sekund (plik ponad 117 MB).

    Przy 117Mb pamięci może okazać się że to już nie będzie test procesora, ale dostępu do pamięci. A w starych kompach z małą ilością pamięci nawet obsługi swap.

    Teraz prawdę powiedziawszy trudno coś przetestować, a już multiplatformowo to już w ogóle. Prosty przykład. Mamy dwa procesory:
    1. jednordzeniowy 3GHz
    2. dwurdzeniowy 2GHz

    Pytanie który wydajniejszy w obliczeniach na liczbach całkowitych? Żeby to stwierdzić potrzeba programu który wykorzysta w jak największym stopniu możliwości jednego i drugiego. Mało tego, w aplikacjach wielowątkowych ma znaczenie system. Ale to i tak mało, ponieważ system może być zoptymalizowany pod katem responsywności, albo wydajności.

    Skutek jest taki, że proste liczenie zależy od zbyt wielu parametrów. Stąd prosto nie da się obliczyć wydajności, można jedynie policzyć czas wykonania dla określonego zadania w skali wielowątkowości.

    To było tylko takie przybliżenie. Bo w końcu mamy też różne kompilatory, różne procesory. Choćby AMD64 w relacji do athlonów XP mają więcej zarówno rejestrów, jak i instrukcji. Ten sam program na tym samym procesorze ale innym systemie może działać szybciej.

    W systemie nawet 32 bitowym istnieje możliwość wykorzystania SSE3, choć nie da sie korzystać w tym trybie z dodatkowych rejestrów. Co już gmatwa sprawe całkowicie.

    Więc chcąc być rzetelnym warto uściślić co program testuje i jak. A przecież w praktyce nie chodzi o to jak szybko procesor policzy nam pętle z mnożeniem, ale zrobi coś bardziej pożytecznego.

    Po prostu chodzi o to by wykorzystać w jak największym stopniu możliwości sprzętu. Dlatego do kart graficznych sterowniki obsługujące akceleracje pisze producent, gdyż napisanie czegoś uniwersalnego nie wykorzysta rozwiązań na danym sprzęcie.

    Jeśli już, to pisać program z różnorodnymi testami, które te czynniki uwzględnią. Wtedy rzeczywiście można co nie co powiedzieć o możliwościach, jakie daje dany sprzęt, a raczej platforma razem z systemem.

    0