digitalmars.D - scanf vs std.stream.stdin.scanf - scanf.d.txt
- g.wiener comcast.net (51/51) Feb 12 2005 I just downloaded the Linux version of D on Jan 31, 2005.
- Ben Hinkle (10/49) Feb 12 2005 Most likely you are seeing the fact that std.stream.stdin is not buffere...
- Gerry Wiener (4/73) Feb 12 2005 Thanks Ben -- that's it! Now I'm seeing D outperform gcc by about 10% on...
- Ben Hinkle (9/13) Feb 12 2005 It would be interesting to find out what the buffer size is for gcc. May...
I just downloaded the Linux version of D on Jan 31, 2005. I've run a simple test comparing the performance of the C version of scanf (in D) versus the std.stream.stdin.scanf performance. On my Debian linux box, the D version of std.stream.stdin.scanf is 10 times slower on a file consisting of 768000 numbers than the C version. I'm wondering why there is such a drastic difference in processing speed. Thanks, Gerry Wiener extern(C) { int scanf (char *, double *); } int main() { double sum = 0; double value; while (scanf("%lg", &value)>= 0) { sum += value; } printf("sum = %g\n", sum); return(0); } -------------------------------------------------------------------- import std.stream; int main() { double sum = 0; double value; while (std.stream.stdin.scanf("%lg", &value)>= 1) { sum += value; } printf("sum = %g\n", sum); return(0); } begin 0644 scanf.d.txt M*3L-"GT-" T*:6YT(&UA:6XH*0T*>PT*("!D;W5B;&4 <W5M(#T ,#L-"B` M86QU92D^/2`P*0T*("` >PT*("` ("!S=6T *ST =F%L=64["0T*("` ?0T* ` end
Feb 12 2005
Most likely you are seeing the fact that std.stream.stdin is not buffered. If you replace the line while (std.stream.stdin.scanf("%lg", &value)>= 1) with BufferedStream bufferedin = new BufferedStream(stdin); while (bufferedin.scanf("%lg", &value)>= 1) then on WinXP where I tested it goes from about 7 times slower than the C version to 2 times faster than the C version. <g.wiener comcast.net> wrote in message news:culubm$2mbl$1 digitaldaemon.com...I just downloaded the Linux version of D on Jan 31, 2005. I've run a simple test comparing the performance of the C version of scanf (in D) versus the std.stream.stdin.scanf performance. On my Debian linux box, the D version of std.stream.stdin.scanf is 10 times slower on a file consisting of 768000 numbers than the C version. I'm wondering why there is such a drastic difference in processing speed. Thanks, Gerry Wiener extern(C) { int scanf (char *, double *); } int main() { double sum = 0; double value; while (scanf("%lg", &value)>= 0) { sum += value; } printf("sum = %g\n", sum); return(0); } -------------------------------------------------------------------- import std.stream; int main() { double sum = 0; double value; while (std.stream.stdin.scanf("%lg", &value)>= 1) { sum += value; } printf("sum = %g\n", sum); return(0); }
Feb 12 2005
Thanks Ben -- that's it! Now I'm seeing D outperform gcc by about 10% on this example. --Gerry In article <cum1jh$2pas$1 digitaldaemon.com>, Ben Hinkle says...Most likely you are seeing the fact that std.stream.stdin is not buffered. If you replace the line while (std.stream.stdin.scanf("%lg", &value)>= 1) with BufferedStream bufferedin = new BufferedStream(stdin); while (bufferedin.scanf("%lg", &value)>= 1) then on WinXP where I tested it goes from about 7 times slower than the C version to 2 times faster than the C version. <g.wiener comcast.net> wrote in message news:culubm$2mbl$1 digitaldaemon.com...I just downloaded the Linux version of D on Jan 31, 2005. I've run a simple test comparing the performance of the C version of scanf (in D) versus the std.stream.stdin.scanf performance. On my Debian linux box, the D version of std.stream.stdin.scanf is 10 times slower on a file consisting of 768000 numbers than the C version. I'm wondering why there is such a drastic difference in processing speed. Thanks, Gerry Wiener extern(C) { int scanf (char *, double *); } int main() { double sum = 0; double value; while (scanf("%lg", &value)>= 0) { sum += value; } printf("sum = %g\n", sum); return(0); } -------------------------------------------------------------------- import std.stream; int main() { double sum = 0; double value; while (std.stream.stdin.scanf("%lg", &value)>= 1) { sum += value; } printf("sum = %g\n", sum); return(0); }
Feb 12 2005
"Gerry Wiener" <Gerry_member pathlink.com> wrote in message news:cumc3n$6u$1 digitaldaemon.com...Thanks Ben -- that's it! Now I'm seeing D outperform gcc by about 10% on this example. --GerryIt would be interesting to find out what the buffer size is for gcc. Maybe it really is worth making the stdio stream buffered by default. The lines in question are way at the bottom of std.stream it says things like stdin = new File(0, FileMode.In); and all we would need to do if we decide to make them buffered is stdin = new BufferedFile(0, FileMode.In); -Ben
Feb 12 2005