[C/C++/Asm] Benchmarking

Pagina: 1
Acties:
  • 151 views sinds 30-01-2008
  • Reageer

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Topicstarter
Door database problemen is de uitgebreide uitleg verloren gegaan (:r :r :r), maar hier is de volledig becommentariseerde code van een benchmarksysteem dat zich niets aantrekt van task switches of thread priorities 8-)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
// ------------------------------------------------------------------------
// IdiotProof Benchmark Code
// Written by Curry, original idea from OiSyN
//
// Benchmarks are accurate no matter what thread priority since time
// elapsed is taken from kernel thread monitoring data
// ------------------------------------------------------------------------

#include <windows.h>
#include <stdio.h>
#include <conio.h>

// ------------------------------------------------------------------------
// Helper macros
// ------------------------------------------------------------------------

// Use this macro at the beginning of the function to declare local
// variables used by the benchmark. 10 million iterations gives a fault
// of max. 1 procent
#define MPrepareBenchmark(p_Iterations)                      \
        LARGE_INTEGER     l_Before, l_After;                  \
        FILETIME        l_CreationTime, l_ExitTime, l_KernelTime;   \
        int        l_Index;                     \
        HANDLE      l_ThreadHandle = GetCurrentThread();      \
        const int      c_Iterations = (p_Iterations)

// The MBeginBenchmark macro initializes loop and prints the method name
#define MBeginBenchmark(p_Name) printf("Method '" #p_Name "'");      \
        GetThreadTimes(l_ThreadHandle, &l_CreationTime, &l_ExitTime,  \
               &l_KernelTime, (LPFILETIME)&l_Before);          \
        for(l_Index = 0; l_Index != c_Iterations; l_Index++) {    

// The MEndBenchmark macro finalizes the loop and prints time results
#define MEndBenchmark }                                \
        GetThreadTimes(l_ThreadHandle, &l_CreationTime, &l_ExitTime,  \
               &l_KernelTime, (LPFILETIME)&l_After);            \
        printf(" took %d milliseconds\n",                    \
             (l_After.QuadPart - l_Before.QuadPart) / 10000)     

// ------------------------------------------------------------------------
// Main program
// ------------------------------------------------------------------------
        
int main()
{
// Define benchmark code
MPrepareBenchmark(10000000);

// Following benchmarks were taken from a recent thread on GoT where the
// benchmarking discussion first arose

// Osiris' version
MBeginBenchmark(Osiris);
  char  Msg[] = "Blablabla";
  for(unsigned int i = 0; i != strlen(Msg); i++)
    if(Msg[i] == 'a')
    Msg[i] = 'c';
MEndBenchmark;

// Curry's version
MBeginBenchmark(Curry684);
  char  Msg[] = "Blablabla";
  for(char *Pointer = Msg; *Pointer; Pointer++)
    if(*Pointer == 'a')
    *Pointer = 'c';
MEndBenchmark;

// Beelzebubu's version
MBeginBenchmark(Beelzebubu);
  char  Msg[] = "Blablabla";
  for(int i=0;Msg[i];i++) 
    if(Msg[i]=='a') 
    Msg[i]='c';
MEndBenchmark;

// Sponz version
MBeginBenchmark(Sponz);
  char  Msg[] = "Blablabla";
  char *p = Msg;  
  while(p = strchr(p,'a'))
    *p='c'; 
MEndBenchmark;

// Oisyn's version
MBeginBenchmark(Oisyn);
  char  Msg[] = "Blablabla";
  char*     Strptr = Msg;
  do
    {
    if(*Strptr == 'a')
    *Strptr = 'c';
    } while (*Strptr++);
MEndBenchmark;

// Wait for keypress before exit
printf("\nPress any key to exit...");
while(!getch());
return 0;
}

// ------------------------------------------------------------------------

Professionele website nodig?


  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Waar zijn de ASM-versies en de testresultaten ? :)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:03

.oisyn

Moderator Devschuur®

Demotivational Speaker

jeeeeeej ik wordt gecredit :D

maar euh... wat is er dan met de database (behalve dat het nu echt bagger werkt)? wat is er aan de hand? :?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Topicstarter
Op maandag 17 september 2001 22:46 schreef OiSyN het volgende:
jeeeeeej ik wordt gecredit :D
Het was echt een geniaal idee, en het bleek ook nog te werken :)
maar euh... wat is er dan met de database (behalve dat het nu echt bagger werkt)? wat is er aan de hand? :?
Beats me maar ik was wel een regel of 30-40 aan uitleg kwijt... :(

Professionele website nodig?


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:03

.oisyn

Moderator Devschuur®

Demotivational Speaker

Op dinsdag 18 september 2001 01:27 schreef curry684 het volgende:

[..]

Beats me maar ik was wel een regel of 30-40 aan uitleg kwijt... :(
scheelt ons weer een hoop lezen :P

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Topicstarter
Op dinsdag 18 september 2001 11:35 schreef OiSyN het volgende:
scheelt ons weer een hoop lezen :P
Inderdaad: Real Programmers don't document. Documentation is for simps who can't read the listings or the object deck.

:Y)

Professionele website nodig?


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:03

.oisyn

Moderator Devschuur®

Demotivational Speaker

en de n00bs begrijpen het toch niet, dus waarom moeite nemen om het uit te leggen :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:03

.oisyn

Moderator Devschuur®

Demotivational Speaker

There once was a master programmer who wrote unstructured programs. A novice programmer, seeking to imitate him, also began to write unstructured programs. When the novice asked the master to evaluate his progress, the master criticized him for writing unstructured programs, saying: "What is appropriate for the master is not appropriate for the novice. You must understand the Tao before transcending structure."
:+

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • SG
  • Registratie: Januari 2001
  • Laatst online: 22-05 12:35

SG

SG surft naar info hardewaren

In TEAM software enginering wordt code documentatie waar nodig erg gewaardeerd en luitjes als jullie twee geweerd.

/me is 'n noob :+

X399 Taichi; ThreadRipper 1950X; 32GB; VEGA 56; BenQ 32" 1440P | Gigbyte; Phenom X4 965; 8GB; Samsung 120hz 3D 27" | W2012SER2; i5 quadcore | Mac mini 2014 | ATV 4g | ATV 4K


  • toraq
  • Registratie: September 2000
  • Niet online

toraq

Shoving is the answer

Op dinsdag 18 september 2001 19:21 schreef SuperG het volgende:
In TEAM software enginering wordt code documentatie waar nodig erg gewaardeerd en luitjes als jullie twee geweerd.

/me is 'n noob :+
Tja, mensen die een heel team nodig hebben om iets te kunnen maken hebben natuurlijk documentatie nodig, die zijn niet zo slim :P

I am a shover robot, do not trust the pusher robot, I will protect you from the terrible secrets of space!


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:03

.oisyn

Moderator Devschuur®

Demotivational Speaker

Op dinsdag 18 september 2001 19:21 schreef SuperG het volgende:
In TEAM software enginering wordt code documentatie waar nodig erg gewaardeerd en luitjes als jullie twee geweerd.

/me is 'n noob :+
duidelijk mensen die de Tao (nog) niet in zich hebben :7


.edit: en dan zal ik speciaal voor jou nog een toepasselijk stukje uit de Tao quoten
A manager went to the master programmer and showed him the requirements document for a new application. The manager asked the master: "How long will it take to design this system if I assign five programmers to it?"

"It will take one year," said the master promptly.

"But we need this system immediately or even sooner! How long will it take it I assign ten programmers to it?"

The master programmer frowned. "In that case, it will take two years."

"And what if I assign a hundred programmers to it?"

The master programmer shrugged. "Then the design will never be completed," he said.
}:O

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Topicstarter
Op dinsdag 18 september 2001 19:21 schreef SuperG het volgende:
In TEAM software enginering wordt code documentatie waar nodig erg gewaardeerd en luitjes als jullie twee geweerd.
Real Programmers don't like the team programming concept. Unless, of course, they are the Chief Programmer.

En als aanvulling op OiSyN:

Real Programmers have no use for managers. Managers are sometimes a necessary evil. Managers are good for dealing with personnel bozos, bean counters, senior planners and other mental defectives.


8-)

Professionele website nodig?


  • SG
  • Registratie: Januari 2001
  • Laatst online: 22-05 12:35

SG

SG surft naar info hardewaren

Op dinsdag 18 september 2001 19:27 schreef OiSyN het volgende:

duidelijk mensen die de Tao (nog) niet in zich hebben :7

.edit: en dan zal ik speciaal voor jou nog een toepasselijk stukje uit de Tao quoten
nou met die quote uit die Tao ben ik het gedeeltelijk mee eens maar vertel volgens mij niet het hele verhaal.
die Quote heb ik ook ergens anders gelezen

Bij 'n groot project met aanzienlijk veel deel problemen die elk aan 'n programmeur besteed kan worden zodat veel van die sub problemen parallel opgelost kunnen worden valt veel winst te behalen.

Bij voorbeeld
'n Game

graphics
AI
sound
GUI
fileIO
gamelogic
etc

hier zou 3 á 5 programmeurs voldoende zijn

maar 5 of nog meer op AI is overkill. dat geeft die TAO quote weer.

X399 Taichi; ThreadRipper 1950X; 32GB; VEGA 56; BenQ 32" 1440P | Gigbyte; Phenom X4 965; 8GB; Samsung 120hz 3D 27" | W2012SER2; i5 quadcore | Mac mini 2014 | ATV 4g | ATV 4K


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:03

.oisyn

Moderator Devschuur®

Demotivational Speaker

misschien was het je nog niet opgevallen (wat me trouwens onmogelijk lijkt met rond de 700 posts op GoT die je al hebt gemaakt), maar als er een smile bijstaat wil dat meestal zeggen dat we het goed bedoelen en dat het misschien ook niet helemaal serieus bedoeld is...

Als ik hier zeg:
OiSyN schreef misschien wel eens een keer het volgende:

Jullie zijn nep-programmeurs! Neem nou MIJ, IK bemeester de Tao tenminste :P
dan zal iedereen begrijpen (dat mag ik hopen tenminste) dat dit niet helemaal serieus bedoeld is en dat ik niet een een of ander arrogant ventje ben die denkt dat ie beter is.
Als iedereen alleen maar bloedserieus reageert, wordt het hier namelijk zo'n duffe saaie boel, endat kunnen we natuurlijk niet hebben :)

Dus misschien een tip: ga niet zo serieus in op sommige kortzichtige opmerkingen met een smile erbij :)

oh, de complete Tao kun je overigens hier lezen :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Killemov
  • Registratie: Januari 2000
  • Laatst online: 23-05 10:14

Killemov

Ik zoek nog een mooi icooi =)

Ja hoor OiSyN ... tis al goed.

Hey Curry ... hoe zit dat nou met die threadmonitor :?
Houdt die echt bij hoeveel tijd een bepaalde thread echt op de CPU draait? (Hoe monitort die dat dan als de monitor zelf op dat moment niet draait ...)

Hey ... maar dan heb je ook wat!


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Topicstarter
Op dinsdag 18 september 2001 23:19 schreef Killemov het volgende:
Hey Curry ... hoe zit dat nou met die threadmonitor :?
Houdt die echt bij hoeveel tijd een bepaalde thread echt op de CPU draait? (Hoe monitort die dat dan als de monitor zelf op dat moment niet draait ...)
Kernel monitort dat. Dus als de monitor niet draait, draait je kernel niet, dus staat je computer uit of zo :)

Professionele website nodig?

Pagina: 1