7 ms·
Don't take this the wrong way, but you guys are the ones making performance claims that it's faster! I would expect you guys to post the numbers comparing it t
by DannyBee 13y ago
Don't take this the wrong way, but you guys are the ones making performance claims that it's faster!
I would expect you guys to post the numbers comparing it to the two most used things out there :)
- WalterBright 13y agoI don't post numbers anymore because I'd always wind up in arguments with people who simply didn't believe them, or thought I'd unfairly manipulated them, or cherry-picked the test cases, whatever. Hence I encourage you to run your own numbers.
- DannyBee 13y agoFair enough. I had some trouble using the ubuntu 13 packages for gdc, so i downloaded it from the gdc project binaries as of the latest available there, as recommended by the readme. Using that to compile warp with gdc with the flags it suggests (-release is not recognized by gdc, -O3 is), i get a warp that works. For including every file in /usr/include/boost/*.hpp in one .cc file (which produces roughly 16 megabytes of C++ code), we get: [dannyb@mainserver 12:40:56] ~ :) $ time gcc -E e.cc >f In file included from e.cc:101:0: /usr/include/boost/spirit.hpp:18:4: warning: #warning "This header is deprecated. Please use: boost/spirit/include/classic.hpp" [-Wcpp] # warning "This header is deprecated. Please use: boost/spirit/include/classic.hpp" ^ gcc -E e.cc > f 3.18s user 0.25s system 97% cpu 3.528 total [dannyb@mainserver 12:40:51] ~ :) $ time clang -E e.cc >f In file included from e.cc:101: /usr/include/boost/spirit.hpp:18:4: warning: "This header is deprecated. Please use: boost/spirit/include/classic.hpp" [-W#warnings] # warning "This header is deprecated. Please use: boost/spirit/include/classic.hpp" ^ 1 warning generated. clang -E e.cc > f 1.42s user 0.14s system 93% cpu 1.657 total [dannyb@mainserver 12:40:33] ~ :( $ time ./warp/fwarpdrive_gcc4_8_1 -I/usr/include -I/usr/include/c++/4.8 -I/usr/include/x86_64-linux-gnu/c++/4.8 -I/usr/include/x86_64-linux-gnu -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include/ -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed/ e.cc >f cla/usr/include/boost/spirit.hpp(18) : warning: "This header is deprecated. Please use: boost/spirit/include/classic.hpp" ./warp/fwarpdrive_gcc4_8_1 -I/usr/include -I/usr/include/c++/4.8 e.cc 2.88s user 0.06s system 95% cpu 3.080 total I've repeated these timings 10 times, and they are within 0.5% of these numbers each time. I've also tried this on a large C++ project i have, that generates about 200 meg of preprocessed source (that i can't share, sadly) and got similar relative timings. I also tried it on some smaller projects. Based on data i have so far, clang blows warp out of the water by a factor of 2 in most cases i've tried it. The above tests include stdout IO, but the relative numbers are the same without it: [dannyb@mainserver 12:48:24] ~ :( $ time gcc -E e.cc -o f In file included from e.cc:101:0: /usr/include/boost/spirit.hpp:18:4: warning: #warning "This header is deprecated. Please use: boost/spirit/include/classic.hpp" [-Wcpp] # warning "This header is deprecated. Please use: boost/spirit/include/classic.hpp" ^ gcc -E e.cc -o f 3.14s user 0.27s system 99% cpu 3.418 total [dannyb@mainserver 12:48:33] ~ :) $ time clang -E e.cc -o f In file included from e.cc:101: /usr/include/boost/spirit.hpp:18:4: warning: "This header is deprecated. Please use: boost/spirit/include/classic.hpp" [-W#warnings] # warning "This header is deprecated. Please use: boost/spirit/include/classic.hpp" ^ 1 warning generated. clang -E e.cc -o f 1.41s user 0.13s system 94% cpu 1.631 total [dannyb@mainserver 12:48:40] ~ :) $ (I reordered this one to make the timings in the same order as they were before) [dannyb@mainserver 12:47:38] ~ :( $ time ./warp/fwarpdrive_gcc4_8_1 -o f -I/usr/include -I/usr/include/c++/4.8 -I/usr/include/x86_64-linux-gnu/c++/4.8 -I/usr/include/x86_64-linux-gnu -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include/ -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed/ e.cc /usr/include/boost/spirit.hpp(18) : warning: "This header is deprecated. Please use: boost/spirit/include/classic.hpp" ./warp/fwarpdrive_gcc4_8_1 -o f -I/usr/include -I/usr/include/c++/4.8 e.c 2.93s user 0.02s system 99% cpu 2.953 total Warp is definitely faster than GCC, though.
- WalterBright 13y agoBecause of different #define's, Warp may take a very different path through header files than other preprocessors do. In fact, Warp doesn't have any predefined macros other than the ones required by the Standard. Hence, to use it with cpp or clang's preprocessor, it needs to be driven with a command that -D defines each macro. There's a command (I forget at the moment what it is) that will tell cpp to list all its predefined macros. It's quite a few. You'll need to do that for clang to get an equivalent list, then drive Warp with that. You'll be able to tell if it is taking the same path or not by using a diff on the outputs that ignores whitespace differences. The reason Warp doesn't predefine all that stuff is because every install of gcc has a different list, and it's completely impractical to try and keep up with all that.
- DannyBee 13y agoI did in fact, use warpdrive, which uses those predefines, as you can see in the commands. I'm also familiar with the innerworkings on llvm and gcc (having hacked a lot on both), and generated the list of include paths i used with warpdrive (emulating gcc 4.8.1) to be exactly the same as GCC on my system uses for 4.8.1. I also verified the preprocessed output is "sane" in each case, as per diff.
- WalterBright 13y ago>Using that to compile warp with gdc with the flags it suggests (-release is not recognized by gdc, -O3 is), Andrei wrote on Reddit: "We build warp at Facebook using gdc with -fno-bound-checks -frelease -O4." http://www.reddit.com/r/programming/comments/21m0bz/warp_a_fast_c_and_c_preprocessor/cged2y6 http://www.reddit.com/r/programming/comments/21m0bz/warp_a_f...
- DannyBee 13y agoThis is not the set of flags you have in the makefile on github though. I would expect people to use those :) In any case, building warp with this brings the timings down to 2.31 seconds, so clang is still 40% faster (1.41 vs 2.31) In any case, at least on my side, i don't have time to further explore, i'd love to see cases where warp is faster, but i haven't found them. (There is also a certain irony of saying you don't post numbers because you get accused, then saying i used the wrong flags, but ...)
- to3m 13y agoA comparison against VC++ would also be interesting. I believe VC++ is commonly used on Windows, which I hear is a somewhat popular platform. (I suppose warp might not run on Windows though.)
- WalterBright 13y agoIn fact I developed Warp on Windows. It compiles and works fine. Warp source code is completely portable between Linux and Windows, with the following exceptions: 1. wchar_t is ushort on Windows, uint on Linux. 2. Warp uses a slightly modified file reader from the one in the D standard library, customized to the platform. Grep the source for "version(Windows)".
- to3m 13y agoThanks! Another item for my to do list then :)
- Zardoz84 13y agoIt's write in D, and there is a build of dmd for window, so should work in Windows.