Arne Skrevet 22. juli 2007 Del Skrevet 22. juli 2007 Hei! Eg har så vidt byrja å snuse litt på C++ igjen, og eg lurer på ein ting. Om eg t.d har denne koden: #include <iostream> using namespace std; int main () { int number = 200000; int temp_var = 0; while (temp_var != number ) { cout << temp_var << endl; temp_var++; } return 0;}]/code] Korleis kan eg ta tida på kor lang tid han brukar på å gjere dei 20000 utrekningane? Lenke til kommentar
GeirGrusom Skrevet 22. juli 2007 Del Skrevet 22. juli 2007 (endret) Hei! Eg har så vidt byrja å snuse litt på C++ igjen, og eg lurer på ein ting. Om eg t.d har denne koden: #include <iostream> using namespace std; int main () { int number = 200000; int temp_var = 0; while (temp_var != number ) { cout << temp_var << endl; temp_var++; } return 0; } Korleis kan eg ta tida på kor lang tid han brukar på å gjere dei 20000 utrekningane? 9121486[/snapback] Du må bruke en timer, tror det er noe som heter time i C biblioteket, men hvis du kjører Windows, kan du bruke High Resolution Timer, som teller antall instruksjoner siden sist gang den ble kalt. QueryPerformanceCounter henter antall instruksjoner (eller noe slikt) QueryPerformanceFrequency henter antall instruksjoner per sekund. fordelen men high resolution timer, er at den aldri kan returnere null, som i noen tilfeller kunne vært katstrofalt for programmets funksjon. Funksjonen er ganske enkel, først henter du frekvensen, deretter henter du PerformanceCounter, og legger den i en midlertidig variabel (på starten) deretter kaller du samme funksjonen på slutten, og dividerer på frekvensen, og vips! så har du antall sekunder. #include <windows.h> #include <iostream> using namespace std; int main () { LARGE_INTEGER start; LARGE_INTEGER end; LARGE_INTEGER freq; int number = 200000; int temp_var = 0; QueryPerformanceFrequency(&freq); QueryPerformanceCounter(&start); while (temp_var != number ) { cout << temp_var << endl; temp_var++; } QueryPerformanceCounter(&end); float variance = ((float)(end - start)) / freq; cout << variance; return 0; } tror det skulle fungere. Endret 22. juli 2007 av GeirGrusom Lenke til kommentar
Arne Skrevet 22. juli 2007 Forfatter Del Skrevet 22. juli 2007 (endret) Det høyres kanskje dumt ut, men er dette innebygd i standardbiblioteket? EDIT: Takk, Geir! Endret 22. juli 2007 av Arne Lenke til kommentar
GeirGrusom Skrevet 22. juli 2007 Del Skrevet 22. juli 2007 Nei, derfor kan det være fint å bruke noe annet hvis du har tenkt å bruke dette noen andre steder (fungerer kun i Windows inkludert Windows CE) Lenke til kommentar
Arne Skrevet 22. juli 2007 Forfatter Del Skrevet 22. juli 2007 Eg ser at dette er litt komplisert, men eg kjem nok til å klare det! No skal eg i midlertid lære meg å lage ein tekstbasert "avansert" kalkulator i C++. Sikkert kjekt nok det... Ligg det langt fram i tida å lage eit program som bruker begge dei etterlengta kjernene i prosessoren min? Eg har nemleg som mål å lage eit program som fyrst gjer 2000000 utrekningar med ei kjerne, og tek tida på dei, så gjer han akkurat det same med 2 kjerner og tek tida på det. Er det det ein kallar hyperthreading? Lenke til kommentar
GeirGrusom Skrevet 23. juli 2007 Del Skrevet 23. juli 2007 Hyperthreading er en slags multi-threading extension til Intel Pentium 4 prosessorer. Men hvordan man opererer på spesifikke kjerner, aner jeg ikke :/ Lenke til kommentar
Giddion Skrevet 23. juli 2007 Del Skrevet 23. juli 2007 (endret) Ligg det langt fram i tida å lage eit program som bruker begge dei etterlengta kjernene i prosessoren min? 9122054[/snapback] Det kommer veldig an på hvordan programmet ditt er laget. Det kan variere fra veldig vanskelig til å legge til en linje eller to(hvilke kompilator/IDE bruker du?) I vs2005 med OpenMP på vil denne koden utnytte alle prosessorene #pragma omp parallel for for (int i = 0; i < size; i++) { x[i] = (y[i] + y[i+1]) / 2; } Men hvordan man opererer på spesifikke kjerner, aner jeg ikke :/ 9123885[/snapback] I windows er det vel SetProcessAffinityMask ogSetThreadAffinityMask som styrer hvilke prosessorer man vil bruke. SetProcessAffinityMask styrer hele programmer, men SetThreadAffinityMask styrer en og en tråd. edit: QueryPerformanceCounter kan gi veldig rare resultater hvis man bruker flere prosessorer sørg derfor for at man bare bruker 1 prosessor når man leser av QueryPerformanceCounter. Mulig dette er fikset på men hvis alt går skeis så vet du hva som må til. lykke til Endret 23. juli 2007 av Giddion Lenke til kommentar
Arne Skrevet 23. juli 2007 Forfatter Del Skrevet 23. juli 2007 Oki, takk for svar, det ligg nok litt langt framme i tid, eg må nok lære meg basics i C++ fyrst. Og forresten, eg bruker Dev C++ med GCC som kompilator. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå