Benchmark procesora. Początki...

Odpowiedz Nowy wątek
2006-11-19 11:59
szwabek1
0

Witam,
Jestem studentem i dostałem za zadanie na projekcie z Organizacji komputerów napisać program w C++ - Benchmark procesorów!
Wiedzę z C/C++ mam na poziomie podstawowym, no może podstawowy to jednak za skromnie powiedziane, ale patrząc na niektóre posty i wypowiedzi ludzi, to w porównaniu do wielu choćby na tym forum, moją wiedze mogę określić jako podstawową.

Nie chcę tu nikogo prosić o wklejenie kodu jakiegoś Benchamarka, bo nie chce iść na łatwiznę, jedynie proszę o jakieś wskazówki i porady.

Na początek myślę, że mój program powinien pobierać dane o procesorze - to jest mój pierwszy problem. W dalszej części będzie używał biblioteki, którą napisze kolega (takie mam wymagania).

Pozdrawiam

Pozostało 580 znaków

2006-11-19 13:30
0

Kiedys (bardzo kiedys ;) ) pisałem taką aplikacje.
Wyglądało to mniej wiecej tak, że uruchamiam nowy wątek i w nim w pętli wykonuje jakies operacje arytmetyczne (na liczbach całkowitych i na zmiennoprzecinkowych), a w głównym wątku liczy czas. Pamiętam, że pobierało się tykniecia zegara od startu komputera.
Można też obliczać ile razy przejdzie pętle w zadanym czasie.

Pozostało 580 znaków

2006-11-19 16:25
0

Problem jest taki, że ja to nie moge zrobić takiego prościutkiego benchmarka, na zasadzie dam jakies liczenie do zrobienia czy zabawe z liczbami pierwszymi itp itd... Prowadzący kazał mi przygotować program gotowy do kazdego typu procesorów... dwurdzeniowe, htt.. no musi to byc ciupke bardziej skomplikowane, no i nie wiem czy po prostu mam mu kazać dwie operacje na raz robić.. chorobcia bedzie ciezko!

Pozostało 580 znaków

2006-11-19 16:29
0

No to facet chce cie wykończyć ;-( .Albo sprzedać ten program :-D
Kiedyś znalazłem taki kod pod Win32 do obliczania prędkości Procesora

EDIT : Kod podany przez - ' Szczawik ' na 4programmers.

(Jeśli może być Windows bo pewnie sobie życzy pod wszystkie istniejące systemy [glowa] .. ) :
Funkcja zwraca w MHz

#include <math.h>

int CheckCPUSpeed(){

  const int DelayTime = 500;

  DWORD TimerHi, TimerLo ;
  int PriorityClass, Priority ;

//Ustawienie priorytetu działania
PriorityClass = GetPriorityClass(GetCurrentProcess);
Priority = GetThreadPriority(GetCurrentThread);
SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);

//Dokonanie pomiaru
Sleep(10);
  asm{
  dw 310Fh // rdtsc
  mov TimerLo, eax
  mov TimerHi, edx
  }
Sleep(DelayTime);
  asm {
   dw 310Fh //rdtsc
  sub eax, TimerLo
  sbb edx, TimerHi
  mov TimerLo, eax
  mov TimerHi, edx
  }

//Przywrócenie priorytetu działania i zwrócenie wyniku
SetThreadPriority(GetCurrentThread, Priority);
SetPriorityClass(GetCurrentProcess, PriorityClass);
return (int)(floor((TimerLo / (1000.0 * DelayTime))));
}

Pozostało 580 znaków

2006-11-19 18:25
0

Wiadomo, że nie ma jednoznacznego testu który określi który procek jest szybszy.
Najlepiej zrobić serie testów.
W tym tez taki, gdzie uruchamiasz kilka(nascie) wątków (z obliczeniami), zeby np. uzwglednic ze procek ma wiecej rdzeniu itd.

Powinny być też jakieś testy wykorzystujące SSE, 3DNow!...

Pozostało 580 znaków

2006-11-19 19:00
0

@dzejo
dzięki za odp, zaraz sprawdzę ten kod:)

@TeWuX
tak właśnie sie obawiam że seria testów to dosyć długa powinna być... sporo różnych technologi mam do sprawdzenia.. ojoj ale bedzie roboty:0

Pozostało 580 znaków

2006-11-19 19:15
0

Dzieki , dzięki , ;-) ;-) nigdy nie zajmowałem się tym tematem , ale
określ dokładniej co ma zawierać test procesora
pamięć , typ , itd , i czy prog ma chodzić pod Win32 ..???

Trochę informacji ...
Może ktoś coś jeszcze wyszpera w przepastnych archiwach X ...


Pozostało 580 znaków

2006-11-19 19:24
0

Odnośnie platformy na jakiej ma działac to hmm... nie ustalałem z prowadzącym więc dla ułatwienia przyjmijmy Win32, ok!

A co ma zawierać test?
Wiesz temat to benchmark. I teraz chyba widz polega na tym, żeby przetestować pod kątem tych wszystkich instrukcji w nowszych i starszych procesorach, szczerze mówiąc sam jeszcze nie wiem ile ich jest...

Pozostało 580 znaków

2006-11-19 19:32
0

No to tu mamy problem , bo w aplikacjach C i C++ w czystym kodzie
nie mozna sprawdzić jak się wykonują ( czyt.jakie się wykonują) , pozostaje Asembler ,

to C czy Asembler ? czy mieszanka zapytaj prow.

Pisanie aplikacji nie jest uwarunkowane CPU , (mniej więcej)
to o czym piszesz wymaga większej wiedzy i ingerencji (wiedzy na temat) w Asm .

Odnośnie tematu Win to mam tylko taki pomysł na razie , uruchomic wątek
zablokować go ,
zmierzyć czas ,
wykonać tajemnicze instrukcje
zmierzyć czas ,
porównac czas przed i po .

Tyle ze w systemach wielozadaniowych jest to dosyć trudna sprawa ,
wyniki są trudne do ustalenia bo czas wykonania wątku określa system ,
zrobienie blokady zawiesza cały system (atom) do zakończenia procedur .
jakieś takie dziwne :|

Tylko właśnie te tajemnicze instrukcje ...
reszta jest w miare opisana ...


Pozostało 580 znaków

2006-11-19 20:30
0

OK, jutro mam te zajęcia, więc pójdę zapytać prowadzącego - 7.30 :| Ale na zajęciach bazujemy na C++ a w zasadzie to stosujemy tylko ten język.

Pozostało 580 znaków

2006-11-19 20:37
0

To się jeszcze zapytaj czy TAJEMNICZE INSTRUKCJE
Miedzy pomiarami czasu w programie
mają byc z bibliotek np.OpenGL czy Direct X 2D ,3D ,
czy chodzi o faktyczne instrukcje procesora ..

Na początek myślę, że mój program powinien pobierać dane o procesorze

??


Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0