Re: How much fast is C++ than Java?
- From: blmblm@xxxxxxxxxxxxx <blmblm@xxxxxxxxxxxxx>
- Date: 17 Apr 2008 15:25:55 GMT
In article <f5806102-8fc6-4871-98eb-251675570c81@xxxxxxxxxxxxxxxxxxxxxxxxxxxx>,
Robert S <roberts218e@xxxxxxxxx> wrote:
On Apr 12, 9:01 pm, blm...@xxxxxxxxxxxxx <blm...@xxxxxxxxxxxxx> wrote:
In article <aMidnZ9wgNOpkZzVnZ2dneKdnZydn...@xxxxxx>,
Malcolm McLean <regniz...@xxxxxxxxxxxxxx> wrote:
[ snip ]
In my (admittedly limited, but more than zero) experience, C
is indeed faster, but not by anything like a factor of 5 to 10.
[ snip ]
Try a routine that uses mutli-dimensional arrays, and calculates numbers
based on adjacent elements in each direction.
What you'll find is that the Java indexing rules are nothing like as
efficient, and you'll get quite a considerable slowdown. I must admit I
haven't done my own timings, this is based on hearsay.
I also am not quite interested enough to do my own experiments, at
least right now. Certainly it's plausible that multidimensional
array access isn't as fast, given that conceptually a Java
multidimensional array is an array of array objects.
Time spent accessing 3D arrays on a modest wintel laptop:
C: 301 ms, Java: 731 ms, Size: 250*250*250
C: 171 ms, Java: 430 ms, Size: 200*200*200
I ran your programs (size 250 only) on a modest Linux desktop and
got -- well, actually they're *not* similar results, but a difference
more in line with the original claim (5 to 10 times slower):
C: 128 ms
Java: 635 ms
I noticed, though, that your Java code includes the allocation
of the array in the time being measured. If I time just the
part of the code that changes the array, I get:
Java, computation only: 121 ms
Whether it's "fair" (whatever that means in context) to include
allocating the array for the Java program but not the C program --
I'm not sure. But it does seem like the difference in overall
runtime isn't related to array access.
I am a bit curious, though, about why you made the array a
global variable in your C program. ?
(I tried making it a local variable in main() and -- as best
I could tell, gcc optimized it out of existence! which makes
a certain amount of sense, since the values placed in the array
are never used. Changing the program to instead use the array
values as input to some meaningless computation got around that,
but I wondered whether you had a similar experience, or your
reason for making it global was something else.)
Which fits in with what I've read about recent benchmarking: Java is
around about 2 to 3 times slower than C at most things.
Nowhere near 5 - 10 times.
Dev-cpp source:
#include <stdio.h>
#include <stdlib.h>
#include <sys/timeb.h>
#define size 250
int a[size][size][size];
int main(int argc, char *argv[])
{
struct timeb time1, time2;
time_t TimeMS; /*millisecond difference*/
time_t TimeS; /*time in seconds*/
time_t Elapsed_MS; /*elapsed time, milliseconds*/
ftime(&time1); /* starting time */
int i, j, k;
for(i=0; i<size; i++)
for(j=0; j<size; j++)
for(k=0; k<size; k++)
{
a[i][j][k] = i + j + k;
}
ftime(&time2); /* ending time */
TimeS = time2.time - time1.time; /*difference in seconds*/
TimeMS = time2.millitm - time1.millitm; /*millisecond
adjustment*/
Elapsed_MS = TimeS*1000 + TimeMS; /*elapsed time,
milliseconds*/
printf("%ld, %ld\n", time2.millitm, time1.millitm);
printf("Elapsed time in ms is: %ld\n", Elapsed_MS);
system("PAUSE");
return 0;
}
Java:
class testCvsJava
{
public static void main(String args[])
{
long m1;
long m2;
m1 = System.currentTimeMillis();
int size = 250;
int a[][][] = new int[size][size][size];
int i, j, k;
for(i=0; i<size; i++)
for(j=0; j<size; j++)
for(k=0; k<size; k++)
{
a[i][j][k] = i + j + k;
}
m2 = System.currentTimeMillis();
System.out.println("Execution time, ms: " + (m2 - m1));
}
}
--
B. L. Massingill
ObDisclaimer: I don't speak for my employers; they return the favor.
.
- References:
- How much fast is C++ than Java?
- From: Sanny
- Re: How much fast is C++ than Java?
- From: Malcolm McLean
- Re: How much fast is C++ than Java?
- From: blmblm
- Re: How much fast is C++ than Java?
- From: Robert S
- How much fast is C++ than Java?
- Prev by Date: Re: ioctl serial port and SIOCGSTAMP
- Next by Date: Re: Portability
- Previous by thread: Re: How much fast is C++ than Java?
- Next by thread: case label does not reduce to an integer constant
- Index(es):
Relevant Pages
|