5 ms·
You can write C in C++ but it won't be idiomatic C++. I've seen plenty of experienced "C++" developers that have no idea what is "shared_ptr".
by tasubotadas 3y ago
You can write C in C++ but it won't be idiomatic C++. I've seen plenty of experienced "C++" developers that have no idea what is "shared_ptr".
- dahart 3y agoTrue partly because shared_ptr is a relatively new language feature; I’ve been locked to a ~decade-old C++ compiler for most of my professional career, and so has everyone I know, just because support for a current compiler across platforms at any given time has been historically so spotty. It seems to be improving at the moment. > it won’t be idiomatic I just looked at the first example: C: https://benchmarksgame-team.pages.debian.net/benchmarksgame/program/spectralnorm-gcc-3.html https://benchmarksgame-team.pages.debian.net/benchmarksgame/... C++: https://benchmarksgame-team.pages.debian.net/benchmarksgame/program/spectralnorm-gpp-8.html https://benchmarksgame-team.pages.debian.net/benchmarksgame/... The C++ doesn’t use shared_ptr or STL or anything, and isn’t that far from the C code, but it isn’t that close either. I wonder if it’s OMP configuration that’s causing it to be slower, or maybe just instruction cache or something since the C++ is larger. The results say this one has C++ going 50% slower. I’m a little skeptical it’s the compiler’s or the language’s fault. I’d speculate it might have more to do with how the program is written.
- dahart 3y agoOh it does too use STL, guess I’m blind. That could be part of the reason it’s slower.
- igouy 3y agoYou seem to be looking at the wrong source code. The "Energy Efficiency across Programming Languages, SLE’17"authors provided this repo — https://github.com/greensoftwarelab/Energy-Languages/blob/master/C/spectral-norm/spectralnorm.gcc-4.c https://github.com/greensoftwarelab/Energy-Languages/blob/ma... https://github.com/greensoftwarelab/Energy-Languages/tree/master/C%2B%2B/spectral-norm https://github.com/greensoftwarelab/Energy-Languages/tree/ma... For a single outlier (regex-redux) there's a 12x difference between the measured times of the selected C and C++ programs. Even so, that mostly messes up the results because the arithmetic mean is used rather than the median. https://benchmarksgame-team.pages.debian.net/benchmarksgame/sometimes-people-just-make-up-stuff.html#averages https://benchmarksgame-team.pages.debian.net/benchmarksgame/...
- dahart 3y agoDid the article use the wrong link? I used the link in the article. The C++ code from your link looks the same as what I saw. Your bottom link shows the same data I see using the link in the article: the C++ is ~50% slower on spectral-norm. I expect that the 12x outlier is because someone did something very non-optimal in C++.
- igouy 3y agoYes, the link grabbing seo claims the benchmarks game has something to say about Java and energy-efficient — in fact the benchmarks game does not measure energy use. No, the link grabbing seo provides the correct source for Table 4 — "Source: Energy Efficiency across Programming Languages, SLE’17" — and google finds the article: https://greenlab.di.uminho.pt/wp-content/uploads/2017/09/paperSLE.pdf https://greenlab.di.uminho.pt/wp-content/uploads/2017/09/pap... > looks the same Please look again. > the 12x outlier #include <pcre.h> vs #include <boost/regex.hpp>
- dahart 3y agoYeah so the 12x gap in regex-redux is measuring the speed of two completely different libraries, and obviously boost is what’s slow. It’s not a language difference, nor even primarily an issue with means vs medians. The issue with regex-redux is slightly more of comparing apples to oranges. I assume you’re referring to regex-redux, but I was confused for a minute there because you linked directly to the C++ code for spectral-norm, not regex-redux, and spectral-norm doesn’t include a regex lib. I had to go looking around for the includes you’re talking about, and the Benchmarks-Game version has multiple C++ entries. There are C++ entries that use pcre, re2, and boost/regex. The C entries all use pcre except the winner, who uses pcre2. > For a single outlier (regex-redux) there's a 12x difference between the measured times of the selected C and C++ programs. BTW, I dont know exactly what they’re referring to there. The time ratio of the Benchmarks Game fastest C version to the slowest C++ version is over 16x. The ratios in the SLE paper of energy and run time are a bit lower than 12 but they also have only one sample, and it uses boost, so I don’t see why regex-redux with boost is useful in any perf or energy comparison other than to serve as a mild warning about using boost. There happens to be a ratio of almost exactly 12x between the slowest C++ version (g++#3 boost) and the fastest C++ version (g++#6 - pcre2). That’s C++ vs C++. Maybe that’s what they were talking about, or maybe the perf numbers have changed out from under the commentary. The ratio of times of the fastest C to the fastest C++ time with regex-redux is 1.4x and they both use pcre2. That seems like a more reasonable place to start.