Hat nem tudom, hogy te mit mertel, de vmit nagyon benezhettel.
Itt vannak az en mereseim:
-------------------------------------------------------------------------------------------
Gep adatai:
david@fokolompos /home/data/david/dev/sandbox/benchmark $ uname -a
Linux 2.6.18.2 #1 PREEMPT Sun Nov 19 07:30:12 CET 2006 i686 Intel(R) Celeron(R) CPU 2.40GHz GenuineIntel GNU/Linux
david@fokolompos /home/data/david/dev/sandbox/benchmark $ free -m
total used free shared buffers cached
Mem: 505 478 26 0 35 232
-/+ buffers/cache: 210 294
Swap: 486 0 486
-------------------------------------------------------------------------------------------
Kod:
C:
int main(void)
{
const int arraySize = 30000;
int myArray[arraySize];
int i;
int j;
for (i = 0; i < arraySize; i++)
{
myArray[i] = i * i % 33;
}
for (i = 0; i < arraySize; i++)
{
for (j = i + 1; j < arraySize; j++)
{
myArray[(i+j)%arraySize] = (i + myArray[i] + myArray[j] * 17) % 33;
}
}
return 0;
}
C++:
int main(void)
{
const int arraySize = 30000;
int myArray[arraySize];
for (int i = 0; i < arraySize; i++)
{
myArray[i] = i * i % 33;
}
for (int i = 0; i < arraySize; i++)
{
for (int j = i + 1; j < arraySize; j++)
{
myArray[(i+j)%arraySize] = (i + myArray[i] + myArray[j] * 17) % 33;
}
}
return 0;
}
D:
int main()
{
const int arraySize = 30000;
int[arraySize] myArray;
for (int i = 0; i < arraySize; i++)
{
myArray[i] = i * i % 33;
}
for (int i = 0; i < arraySize; i++)
{
for (int j = i + 1; j < arraySize; j++)
{
myArray[(i+j)%arraySize] = (i + myArray[i] + myArray[j] * 17) % 33;
}
}
return 0;
}
-------------------------------------------------------------------------------------------
Makefile:
all:
gcc -mtune=pentium3 -O2 -pipe test_cpp.cpp -o test_cpp
gcc -mtune=pentium3 -O2 -pipe test_c.c -o test_c
dmd test_d.d -O
-------------------------------------------------------------------------------------------
Forditok:
dmd:
david@fokolompos /home/data/david/dev/sandbox/benchmark $ dmd -v
Digital Mars D Compiler v0.173
Copyright (c) 1999-2006 by Digital Mars written by Walter Bright
gcc:
david@fokolompos /home/data/david/dev/sandbox/benchmark $ gcc -v
Reading specs from /usr/lib/gcc/i686-pc-linux-gnu/3.4.6/specs
Configured with: /var/tmp/portage/gcc-3.4.6-r1/work/gcc-3.4.6/configure --prefix=/usr --bindir=/usr/i686-pc-linux-gnu/gcc-bin/3.4.6 --includedir=/usr/lib/gcc/i686-pc-linux-gnu/3.4.6/include --datadir=/usr/share/gcc-data/i686-pc-linux-gnu/3.4.6 --mandir=/usr/share/gcc-data/i686-pc-linux-gnu/3.4.6/man --infodir=/usr/share/gcc-data/i686-pc-linux-gnu/3.4.6/info --with-gxx-include-dir=/usr/lib/gcc/i686-pc-linux-gnu/3.4.6/include/g++-v3 --host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --disable-altivec --enable-nls --without-included-gettext --with-system-zlib --disable-checking --disable-werror --disable-libunwind-exceptions --disable-multilib --disable-libgcj --enable-languages=c,c++,f77 --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu
Thread model: posix
gcc version 3.4.6 (Gentoo 3.4.6-r1, ssp-3.4.5-1.0, pie-8.7.9)
-------------------------------------------------------------------------------------------
Meresi eredmenyek:
david@fokolompos /home/data/david/dev/sandbox/benchmark $ time ./test_c
real 0m18.017s
user 0m17.757s
sys 0m0.216s
david@fokolompos /home/data/david/dev/sandbox/benchmark $ time ./test_cpp
real 0m14.330s
user 0m14.109s
sys 0m0.180s
david@fokolompos /home/data/david/dev/sandbox/benchmark $ time ./test_d
real 0m16.843s
user 0m16.617s
sys 0m0.180s
-------------------------------------------------------------------------------------------
Megjegyzes:
Javat nem teszteltem, mert nem akarok hosszu flamet a Java optimalizalasarol. Nekem most eleg volt a C, C++, D.
-------------------------------------------------------------------------------------------
Konkluzio:
Nem latom a szignifikans kulonbseget.