Vb.Net 27 x schneller ?!

Previous topic - Next topic

Kitty Hello

Ach: Und ein native C++ compiler ist langsamer als ein JIT? *Hüstel...*

Hier mal ein echter Test:
Code (glbasic) Select
int main(int, char**)
{
#define COUNT 20000
DWORD t1, t2;
printf("GLBasic, native\n");
{
DGIntArray arr;
DIM(arr, COUNT,0,0,0);
for(int i=0; i t1=GetTickCount();
for(double i=0; i<=COUNT-1; ++i)
for(double j=i; j<=COUNT-1; ++j)
{
            if(arr[i] > arr[j])
            {
arr[0] = arr[i];
arr[i] = arr[j];
arr[j] = arr[0];
            }
}
t2=GetTickCount();
printf("Time: %.2f sec\n", (double)(t2-t1) / 1000.0);
}

printf("C++, native\n");
{
double* arr = new double[COUNT];
for(int i=0; i t1=GetTickCount();
for(double i=0; i<=COUNT-1; ++i)
for(double j=i; j<=COUNT-1; ++j)
{
            if(arr[(int)i] > arr[(int)j])
            {
arr[0] = arr[(int)i];
arr[(int)i] = arr[(int)j];
arr[(int)j] = arr[0];
            }
}
t2=GetTickCount();
printf("Time: %.2f sec\n", (double)(t2-t1) / 1000.0);
delete[] arr;
}


printf("C++, optimized\n");
{
double* arr = new double[COUNT];
for(int i=0; i t1=GetTickCount();
for(int i=0; i for(register int j=i; j {
            if(arr[i] > arr[j])
            {
arr[0] = arr[i];
arr[i] = arr[j];
arr[j] = arr[0];
            }
}
t2=GetTickCount();
printf("Time: %.2f sec\n", (double)(t2-t1) / 1000.0);
delete[] arr;
}
printf("C++, std::sort\n");
{
std::vector arr(COUNT);
for(int i=0; i t1=GetTickCount();
std::sort(arr.begin(), arr.end());
for(int i=0; i t2=GetTickCount();
printf("Time: %.2f sec\n", (double)(t2-t1) / 1000.0);
}
}
Und hier das Ergebnis:
Code (glbasic) Select
GLBasic, native
Time: 9.88 sec
C++, native
Time: 4.47 sec
C++, optimized
Time: 1.50 sec
C++, std::sort
Time: 0.00 sec
Daran sieht man:
- Der notwendige GLBasic overhead macht etwas aus
- einige Optimierungen sind nicht ohne INLINE möglich
- die Wahl eines anderen Algorithmus (hier qsort statt bubble sort) ist unerreichbar
- es gibt keine schnellere Sprache als C++, ausser optimiertem ASM, und das besser zu machen als ein Compiler ist heute fast nicht mehr möglich.

trucidare

na endlich is die diskusion vorbei mit dem c++ beispiel sollte nun alles gesagt sein. ich wäre dankbar für keine weiteren speedtests weil ich darin keinen sinn sehe. wenn einer meint das seine lieblingssprache besser ist soll der die nehmen und nicht anfangen mit speedtests etc pp. mir ist das vollkommen wurst wie schnell mein program läuft hauptsache es erfüllt seinen sinn.
punkt aus pasta und nun wieder zum urlaub *hrhrhrhr* ;)
MacBook Pro 2,2 GHz Core 2 Duo, 4 GB RAM, 160 GB HDD, 8600M GT
Core i3 - 3,07 GHz, 8 GB Ram, 2.5 TB HDD, Geforce GTX 260+ OC

Kitty Hello

Ja. Ausserdem muss man immer die Sprache als Ganzes ansehen. Es gibt 100e von Sachen, wo GLBasic klar schneller ist als VB. Aber wie gesagt - jetzt is' erstmal Schluss ;)

trucidare

richtig und nun will ich das glbasic programme für mac kompiliert ;)
MacBook Pro 2,2 GHz Core 2 Duo, 4 GB RAM, 160 GB HDD, 8600M GT
Core i3 - 3,07 GHz, 8 GB Ram, 2.5 TB HDD, Geforce GTX 260+ OC

Sebe

Die Auffassung, dass C++ die schnellste Sprache ausser ASM ist, ist schlichtweg falsch.

1. hängt das stark vom verwendeten Compiler ab
2. Ist ANSI oder ISO C nochmal ein Stück schneller als C++
3. der BlitzMax Compiler erzeugt Programme, die durchaus etwas schneller sind als der GNU C++
4. Speedtests liegen mir keine vor, aber ich denke Visual C# kompilierte JITs sind ebenfalls schneller als GNU C++ Programme, zumindest in den meisten Fällen

=> Langsamkeit lässt sich nicht durch irgendwelche Gegebenheiten in der Sprache entschuldigen. Je besser der ASM Output des Compilers, desto besser das resultierende Compilat. Wenn GLBasic Programme langsamer sind als GNU C++ Programme, dann nur deshalb weil der ASM Output nicht so gut optimiert wird. Was auch kein Wunder ist, das an GLBasic lange nicht so viele Leute arbeiten wie am GNU C++. Der Vorteil von .Net liegt eben darin, dass hier mehrere Schritte erfolgen:

Code -> MSIL
MSIL -> JIT -> native Exe

Und das, was ich hier als JIT bezeichnet habe drückt eigentlich nur folgendes aus: was ein "normaler" Compiler am ASM Output selbstständig optimieren muss um konkurrenzfähig zu sein, dass passiert bei dotNet 100% automatisch. Ein GLBasic.NET wäre ganz automatisch schneller als die heute kompilierten Programme.

D2O

Hmmm, ich enthalte mich jetzt mal der Stimme :) :)
Möcht nicht nochmal in ein kleines fettnäpfchen treten ;)

Naja fast,
Sebe macht gute vorschäge,
Du verteitigst GLB wo es nur geht.

Entscheiden muss halt Gernot, was wo wie eingbaut wird ohne das die Kompatibilität unter den unterschiedlichen OS leidet
und es nicht zu verwirrend wird.
Dazu muss man natürlich auch beachten das GLB "Nebenberuflich" gehegt und geflegt wird, das auch noch sehr gut.

Mein vorschlag wäre einen neuen Thread, besser noch eine eigen Rubrik zu erstellen, wo die Wünsche und anregungen ein kommen, und nur das.
Gespame und sonstiges in einem Offtopic rein mit einem Link zu diesem.

Dann bleibt die übersichtlichkeit vorhanden ;)

Interessant wäre auch noch eine Rubrik "CodeTemplates" das sich ein bisschen von Codesnippets unterscheiden soll.
Es sollten reine Functionbibliotheken sein die sofort, bzw. nur mit geringster anpassung benutzbar sind.
Hier kann man nicht einfach rein Posten sondern nur ein Moderator kann Code, z.b. eben das mit Keyhit, Savefunctionen, Laderoutinen.....usw,
reinschieben oder löschen kann.

Quote from: Sebe@ Slayer: ah, ein Bekannter Name aus dem Blitzforum =) Wie hat es denn dich hierher verschlagen?
Naja, BM ist mir zu Kompliziert geworden, hab zu wenig zeit.(Wenn ich nicht so ein Sammler wäre, wär das Ding schon längst verkauft)
GLB finde ich sehr gut :)
Mein Englisch wortschatz kann man an denn Fingern ablesen.
Gernot ist meiner meinung nach Top.
Bis auf kleine Haarspalterreien ist die Community ganz OK.
I7 2600K; 8 GB RAM ; Win10 Pro x64 | NVidia GTX 750 TI 2048MB ; Realtec OnBoard Sound;
Lenovo ThinkPad T400: XP Pro
GLB Premium-immer Aktuell

Schranz0r

Hier habe ich auch meine Post gelöscht !
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard