was muss ein Progammierer können?
-
Getestet:
Unoptimiert:Zahl: 20000 Zeit: 39984 Zahl: 20000 Zeit: 23937 Zahl: 20000 Zeit: 10672
Optimiert:
Zahl: 20000 Zeit: 28562 Zahl: 20000 Zeit: 5453 Zahl: 20000 Zeit: 5469
Code:
#include <iostream> #include <time.h> int main() { const int N = 150000, M = 20000; int a[N] = {0}; clock_t t = clock(); int i, j; int x = 0; for (i = 0; i < M; i++) for (j = 0; j < N; j++) x &= a[j]++; clock_t d = clock() - t; std::cout << "Zahl: " << x + a[20] << std::endl << "Zeit: " << d << std::endl; memset(a, 0, sizeof(a)); t = clock(); x = 0; for (i = 0; i < N; i++) for (j = 0; j < M; j++) x &= a[i]++; d = clock() - t; std::cout << "Zahl: " << x + a[20] << std::endl << "Zeit: " << d << std::endl; memset(a, 0, sizeof(a)); t = clock(); x = 0; for (i = 0; i < N; i++) { int v = a[i]; for (j = 0; j < M; j++) x &= v++; a[i] = v; } d = clock() - t; std::cout << "Zahl: " << x + a[20] << std::endl << "Zeit: " << d << std::endl; }
-
@Gregor: wie du siehst optimiert Java doch ein bisschen.
-
Original erstellt von Mr. N:
@Gregor: wie du siehst optimiert Java doch ein bisschen.Ja! OK! Stimmt!
...übrigens mag mein g++ die 2. Variante überhaupt nicht. bei stärkster Optimierung braucht sie fast 50% mehr Zeit, als Variante 1. ...Variante 3 wird sehr gut optimiert.
...vielleicht sollte man auch bei C++ dem Compiler so viel Optimierungen, wie möglich abnehmen, so dass er selbst nur noch wenig machen muss. ...dann dürfte zumindest ähnliche Performance auf verschiedenen Compilern eher der Fall sein.
BTW : Das ist eine Sache, die mich an C++ sehr stört. Die Performance der Programme ist sehr stark compilerabhängig. Das kann aber auch daran liegen, dass sich viele einfach viel zu sehr auf die tollen Optimierungen ihres Compilers verlassen.
[ Dieser Beitrag wurde am 06.01.2003 um 19:40 Uhr von Gregor editiert. ]
-
Das ist kein Grund gegen C++ :D. Welchen g++ hast du?
-
Original erstellt von Mr. N:
Das ist kein Grund gegen C++ :D. Welchen g++ hast du?Ein Grund gegen C++ ist das sicherlich nicht. ...ich finde es aber trotzdem doof!
Ich habe g++ aus MinGW 2.0.0-3. Das dürfte also eine recht neue Version sein.
-
$ g++ -v Reading specs from /usr/lib/gcc-lib/i686-pc-cygwin/3.2/specs Configured with: /netrel/src/gcc-3.2-3/configure --enable-languages=c,c++,f77,java --enable-libgcj --enable-threads=posi x --with-system-zlib --enable-nls --without-included-gettext --enable-interpreter --disable-sjlj-exceptions --disable-ve rsion-specific-runtime-libs --enable-shared --build=i686-pc-linux --host=i686-pc-cygwin --target=i686-pc-cygwin --enable -haifa --prefix=/usr --exec-prefix=/usr --sysconfdir=/etc --libdir=/usr/lib --includedir=/nonexistent/include --libexecd ir=/usr/sbin Thread model: posix gcc version 3.2 20020927 (prerelease)
-
Und mit meinem g++ unter Cygwin:
Zahl: 20000 Zeit: 27594 Zahl: 20000 Zeit: 7734 Zahl: 20000 Zeit: 5657
-
C:\Dokumente und Einstellungen\Otaku\Desktop\Temp>g++ -o Test.exe Test.cpp
C:\Dokumente und Einstellungen\Otaku\Desktop\Temp>Test
Zahl: 20000
Zeit: 30183
Zahl: 20000
Zeit: 24735
Zahl: 20000
Zeit: 18267C:\Dokumente und Einstellungen\Otaku\Desktop\Temp>g++ -o Test.exe Test.cpp -O3
C:\Dokumente und Einstellungen\Otaku\Desktop\Temp>Test
Zahl: 20000
Zeit: 22812
Zahl: 20000
Zeit: 30394
Zahl: 20000
Zeit: 4306C:\Dokumente und Einstellungen\Otaku\Desktop\Temp>g++ -v
Reading specs from C:/MinGW/bin/../lib/gcc-lib/mingw32/3.2/specs
Configured with: ../gcc/configure --with-gcc --with-gnu-ld --with-gnu-as --host=
mingw32 --target=mingw32 --prefix=/mingw --enable-threads --disable-nls --enable
-languages=f77,c++,objc,ada --disable-win32-registry --disable-shared
Thread model: win32
gcc version 3.2 (mingw special 20020817-1)Zum Vergleich die Java-Version :
E:\JavaProjects\CacheTest>java CacheTest
Variante 1 :
Zahl : -1294967296
Zeit : 23755
Variante 2 :
Zahl : -1294967296
Zeit : 18146
Variante 3 :
Zahl : -1294967296
Zeit : 7410E:\JavaProjects\CacheTest>java -version
java version "1.4.1_01"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1_01-b01)
Java HotSpot(TM) Client VM (build 1.4.1_01-b01, mixed mode)
-
@Gregor: Teste das mit -O3 nochmal. Wenns nicht klappt kannst du dich über _deinen_ g++ ärgern.
-
Original erstellt von Mr. N:
@Gregor: Teste das mit -O3 nochmal. Wenns nicht klappt kannst du dich über _deinen_ g++ ärgern.Ich habe das schon diverse male neukompiliert und getestet! ...und ich ärgere mich über den Compiler!