Jeg har faktisk aldrig lavet en benchmark med Delphi.
Men: - traditionelt har Borland prioriteret godt udviklings-miljø og hurtig compilering fremfor avanceret optimization - traditionelt har Pascal sproget aldrig været meget brugt til "rå beregninger" (Fortan og C har domineret dette område) og derfor har der heller ikke været den store grund til at forfine optimeringen
Jeg vil forvente Delphi kode at være 25-33% langsommere end de bedste C/C++/Fortran compilere, 0-10% langsommere end de mere jævne C/C++/Fortran compilere, 0-20% hurtigere end Java og 50-100% hurtigere end VB.
Men er det vigtigt ?
Med den hastighed en 5000 kr. computer har idag, så er det efterhånden ret sjældent at "Rå beregninger" er en flaskehals.
Det hænder indenfor visse videnskaber (kryptografi, simulationer etc.), men 99% af computer brugere har ikke den slags behov.
arne_v >> Der i har du ikke ret. Borland har altid lavet Super fin optimeres Sourcecode. ALLE tests viser at et super optimeret program i C++ er lige så hurtig som et Superoptimeret program i Delphi.
Dog vil jeg give dig ret i din antagelse om kring flaskehals problemer. Problet er som regl din algoritme frem for din kode.
Et meger godt eksempel her på er at Hvis du skal farve nogle pixels i en Bitmap fx. sort så kam nan bruge noget Alla det her :
for i := 0 to 100 do Bitmap.Canvas.Pixels[i,0] := clBLack;
Det er en meget langsom måde at gøre tingene på fordi den tegner hele skærmen op hver gang den har sat en pixel. Og ikke fordi en TCanvas er langsom :-)
I stedet for skal man bruge niget alla det her :
{$R-} Type TScanline = array[0..0] of TRGBTriple;
var aScanline : TScanline; begin aScanline := TScanline(Bitmap.Scanlines[0]); for i := 0 to 100 do aScanline[i].red := $FF; end;
Alle kode eksempler er skrevet frit fra leveren forvent ikke Delphi forstår det hele :-)
Men Det viser meget godt den der mel algoritmen !! Af indelysende grunde er det hurtigere at opdatere skærmen 1 gang i stedet for 100
Der må være benchmarks på nettet. Alt hvad I har præsenteret indtil videre ved jeg i forvejen. Lad mig komme med et eksempel:
Delphi:
program SpeedTestDelphi;
{$APPTYPE CONSOLE}
uses SysUtils, Windows;
var A,B:Double; Time:Integer; DoubleResult1,DoubleResult0:Double; i:Integer; begin A:=37; B:=71;
Time:=GetTickCount; DoubleResult1:=0; for i:=0 to 1000000000 do begin DoubleResult0:=100 / Sqrt(A) / Sqrt(B) - (A / B) * (B / A); DoubleResult1:=DoubleResult1+DoubleResult0; end; Time:=GetTickCount-Time;
Write(Floattostr(Time/1000)); end.
FORTRAN:
Program SpeedTest
use DFPORT ! for calling RTC
implicit none
real*8:: RTCSeconds real*8 :: a,b,DoubleResult0,DoubleResult1,timevar0,timevar1 integer:: i
A=37 B=71 timevar0=RTC()
DoubleResult1=0. do i=0,1000000000 DoubleResult0=100.0d+0 / Sqrt(A) / Sqrt(B) - (A / B) * (B / A) DoubleResult1=DoubleResult1+DoubleResult0 enddo
På min computer tager Delphi programmet omkring 400 sekunder at udføre, mens FORTRAN programmet tager 3.5 sekund at udføre. Jeg er ikke i tvivl om, at det har noget at gøre med den måde compileren bygger det hele sammen på, hvor delphi måden nok er lidt mere slavisk og uintelligent end fortran der nok finder løsningen på en eller anden mere analytisk måde.
Eventuelle performance tests fra nettet skal derfor være så snedig opbygget, at intelligente compilere ikke kan snyde.
JEG KAN BARE IKKE FINDE SÅDANNE TESTS.
Vi taler her primært om Delphi, C#, C++, Fortran og VB
borrisholt -> Kender godt siden, der står nogle rimelig fede ting derpå. Men der er så vidt jeg ved ikke sammenligninger af sprog ... eller tager jeg fejl
just>> De sammenligner vist ikke .... Jeg skal lige tænke for jeg synes jeg har set sådan noget et sted. Men de der OptimalCode dudes de er næsten lige så dygtig som mig ! ...Nå ja måske de er lidt bedere end mig, men jeg har flere heste !
var A,B:Double; Time:Integer; DoubleResult1,DoubleResult0:Double; i:Integer; begin A:=Sqrt(37); B:=Sqrt(71);
Time:=GetTickCount; DoubleResult1:=0; for i:=0 to 1000000000 do begin DoubleResult0:=100 / A / B - (A / B) * (B / A); DoubleResult1:=DoubleResult1+DoubleResult0; end; Time:=GetTickCount-Time;
Ikke nødvendigvis noget. Jeg var bare nysgerrig efter steder på nettet, hvor der var udført grundige tests af de forskellige programmeringsmiljøer med vægt på performance.
Jeg søger efter sammenligninger, hvor compilerne ikke snyder undervejs.
I princippet kunne jeg bare smide en Sqrt(Sin(i)) og Sqrt(Cos(i)) ind i stedet for Sqrt(A) og Sqrt(B).
Aligevel kan man jo se af løkken, at bare oveaheadet ved at køre igennem løkken er betydelig større end i Fortran, også selvom Fortran gør noget i løkken.
Der er jo alle de klassiske benchmarks fra før SPEC: dhrystone, whetstone, livermoore, linpack.
Men den eneste jeg kan finde i Pascal er dhrystone og hvis jeg husker rigtigt (det er 10-15 år siden) så er dhrystone integer performance og ikke FP performance.
Så du kan nok ligeså godt prøve at forbedre dit eget program.
Hmm ... tak for oplysningerne. Det er interessant at se, men som du selv siger er det ikke så delphi relateret. Selvom du gør dit bedste for at svare vil jeg ikke give dig pointene. For jeg må ikke oprette spørgsmålet igen.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.