Page 1 of 1

Benchmark PB

Posted: Mon Jan 29, 2024 12:53 pm
by Kwai chang caine
Hello at all

I want to test and compare all my machines :idea:
I have see there are several freeware softwares (Everest, Geekbench, ...) for do that, but the result is often very hard to analyse, too much informations for me :oops:
Do you believe, it's interesting to do that with PB, for just have a simple result (Read/write drive, Read/write memory, calculations, etc ...) or know you a very simple freeware for do this job

Have a good day

Re: Benchmark PB

Posted: Mon Jan 29, 2024 5:44 pm
by threedslider
Hello

You need to make all sorta of algorithms to test the speed for PB with loops, search algorithm and data structure in google and there are a lot of plenty infromation to create a small program written by you :)

Not sure if there are someone can code a benchmark for you ? :?

And have a nice day to you too ;)

Re: Benchmark PB

Posted: Mon Jan 29, 2024 7:14 pm
by Tenaja
There is a web site that compares benchmarks of many languages & compilers called the compiler game or something like that. It would be perfect to translate that C code into PB, as you could also compare THE benchmark, C, on the same machine.

https://benchmarksgame-team.pages.debia ... est/c.html

Re: Benchmark PB

Posted: Tue Jan 30, 2024 8:49 am
by threedslider
Ok I have created a similar a benchmark maybe it is not good one but you can have a view of something the speed :)

Here my code :

Code: Select all

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Created by threedslider 01/31/2024
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


Procedure _2D_Rectangle_shape(x1, y1, x2, y2, r1, g1, b1)
   StartDrawing(ScreenOutput())
   For y = y1 To y2
     For x = x1 To x2       
       Plot(x,y,RGB(r1, g1, b1))
     Next
   Next
  StopDrawing()
EndProcedure



Procedure _2D_Rectangle_benchmark(r, g, b)
  
  randUp1 = Random(790)
  randUp2 = Random(590) 
  randDown1 = Random(790) 
  randDown2 = Random(590) 
  
  bg_r = r
  bg_g = g
  bg_b = b
  
    _2D_Rectangle_shape(randUp1, randUp2, randDown1, randDown2, bg_r, bg_g, bg_b)
 
EndProcedure



InitSprite()
InitKeyboard()

OpenWindow(1, 0,0,800,600,"2d rectangle shape benchmark", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(1),0,0,800,600,0,0,0)


  ClearScreen(RGB(0,0,0))
  
  stop = 0
  color_change = 1
   

Repeat
  ExamineKeyboard()
  
  stop = stop + 1
  
  color_change = color_change + 1
  
  event = WindowEvent()
  
  If color_change > 0 And color_change < 255
    _2D_Rectangle_benchmark(255-color_change, 0+color_change, 255-color_change ) 
  Else
    If color_change >= 255
    color_change = 0
    color_change = color_change + 1
    _2D_Rectangle_benchmark(0+color_change, 255-color_change, 0+color_change ) 
    EndIf 
  EndIf
  
  time.q = ElapsedMilliseconds()
  
  FlipBuffers()
  
  Debug time/1000
  
Until event = #PB_Event_CloseWindow Or KeyboardPushed(#PB_Key_Escape) Or stop = 1000
End
You need to compile in debugger you view in time which take it.

So mine it took 8 seconds and you ?

Re: Benchmark PB

Posted: Tue Jan 30, 2024 9:03 am
by Fred
The event loop is wrong, you need to process all the messages at every frame:

Code: Select all

Repeat
  event= windowevent()
  ; do you event code here
Until event=0

Re: Benchmark PB

Posted: Tue Jan 30, 2024 9:22 am
by threedslider
Fred wrote: Tue Jan 30, 2024 9:03 am The event loop is wrong, you need to process all the messages at every frame:

Code: Select all

Repeat
  event= windowevent()
  ; do you event code here
Until event=0
Thank you Fred for pointed this.
Alright, so I have disabled the event by

Code: Select all

; event= windowevent()
and it tooks now 6 sec, is it real time now ?

Re: Benchmark PB

Posted: Tue Jan 30, 2024 9:37 am
by Fred
You need to disable VWait with #PB_Screen_NoSynchronization if you want maximum troughput. That's wierd, event loop shouldn't impact perf at all.

Re: Benchmark PB

Posted: Tue Jan 30, 2024 10:26 am
by threedslider
Yes with #PB_Screen_NoSynchronization is a way better for perfomance it tooks now 4 seconds :)

Event loop is quite fast but not fast as alone, you think any possible to improve the loop in your dev ?

Thanks ! PB is awesome :P

Re: Benchmark PB

Posted: Tue Jan 30, 2024 5:10 pm
by Kwai chang caine
Hello threedslider :D

Excuse me for the late answer :oops: i not receive the mail notification of your answer :|
Not sure if there are someone can code a benchmark for you ? :?
It's not my goal :wink:
I wanted just have advice of MASTERS on my idea, and may be links of freewares, simple to read their results
Also have advice about possibility with my little knowledge to accomplish this task :wink:
Obviously, i'm not against receive pieces of code for help me in this little project :mrgreen: like you give to me 8)

Thanks a lot for you nice code 8)
For good understand, your code test what exactely ?

The rapidity of :
1/ Graphic card ?
2/ Memory ?
3/ Other component of the machine ?

@FRED
Thanks too, for your precious help :wink:

Re: Benchmark PB

Posted: Wed Jan 31, 2024 4:59 am
by threedslider
Hello :)

It is a calculation of speed for drawing with a lot of rectangles from scratch using the function plot with pixel by pixel so I have generated from different size to this shape at different location and different color. This code show a generated of 1000 shapes of rectangle with loop as repeat. So what does mean the speed? It means when it generates a lot of shapes the better is less in time of calculation thus if it takes more time the bad is it. It is a machine with cpu make a task for a measure of speed of calculation given by PB to my code and my code is an example on how make your as benchmark application :)

That is all.

If you have question on more how to make it, ask us ;)

Of course, you can perform the speed from, memory, graphic, algorithm, etc…

Re: Benchmark PB

Posted: Wed Jan 31, 2024 7:56 pm
by Kwai chang caine
Thanks a lot for your precious explanation 8)

After your nice code, I don't know if it's the good way :oops: but i can now, try to test the memory

Code: Select all

TimeStart = ElapsedMilliseconds() 

For i = 1 To 10000
 
 *Ptr = AllocateMemory(i * 2)
 Sentence$ = RSet("", i, "*")
 PokeS(*Ptr, Sentence$, i, #PB_Ascii)
 ;Debug PeekS(*Ptr, i, #PB_Ascii)
 FreeMemory(*Ptr)
 
Next

Debug StrF((ElapsedMilliseconds() - TimeStart) / 1000) + " seconds"
And try to test a hard drive

Code: Select all

Drive.s = "c:\"
TimeStart = ElapsedMilliseconds()
Folder.s = FormatDate("%yy%mm%dd", Date()) + FormatDate("%hh%ii%ss", Date())
FileTest$ = Drive + Folder + "\"
SHCreateDirectory_(#Null, FileTest$) 
Canal = CreateFile(#PB_Any, FileTest$ + "\Test")

If Canal
 
 For i = 1 To 100000
  WriteStringN(Canal, RSet("", i, "*"), #PB_Ascii)
 Next
  
 CloseFile(Canal)
 
 If Not DeleteDirectory(GetPathPart(FileTest$), "*.*", #PB_FileSystem_Recursive|#PB_FileSystem_Force)
  MessageRequester("Error", "The folder test can't be deleted.")
 EndIf 
  
Else

 MessageRequester("Error", "The file test can't be created.")
      
EndIf

Debug StrF((ElapsedMilliseconds() - TimeStart) / 1000) + " seconds"

Re: Benchmark PB

Posted: Thu Feb 01, 2024 8:49 am
by threedslider
Nice starting :)

But not sure if this is one good way but I do a little modification as here :

Code: Select all

TimeStart = ElapsedMilliseconds() 

For i = 1 To 10000
 
 *Ptr = AllocateMemory(i * 2)
 Sentence$ = RSet("", i, "*")
 PokeS(*Ptr, Sentence$, i, #PB_Ascii)
 ;Debug PeekS(*Ptr, i, #PB_Ascii)
 FreeMemory(*Ptr)
 Debug StrF((ElapsedMilliseconds() - TimeStart) / 1000) + " seconds"
 
Next
The output is not shown the same here, maybe more corret, right ? Because it perform the time speed inside of loop to "For" ( :!: )...

Re: Benchmark PB

Posted: Thu Feb 01, 2024 10:53 am
by threedslider
... Ok I think all your codes are good and i may be wrong mine :)

Re: Benchmark PB

Posted: Thu Feb 01, 2024 11:02 am
by threedslider
A test for 2D arrays for one millions arrays :shock: ! (Need to compile in x64)

Code: Select all

TimeStart = ElapsedMilliseconds() 

Dim tab(1000,1000)

For i = 0 To 1000-1
  For ii = 0 To 1000-1
 
 	tab(i,ii) = i * 2 + 5 + ii

  Next
Next

FreeArray(tab())

Debug StrF((ElapsedMilliseconds() - TimeStart) / 1000) + " seconds"

Debug tab()
Very fast ! :mrgreen:

Re: Benchmark PB

Posted: Thu Feb 01, 2024 5:53 pm
by Kwai chang caine
Incredible !!!! :shock:
0.0560000017 seconds
Thanks a lot for your new code 8)

Image

and HOP.....in my basket 8)

@TENAJA
Excuse me for not answer to your message, i see it only now :oops:
So...later i thanks you very much for your nice link 8)