[Beowulf] Stroustrup regarding multicore
diep at xs4all.nl
Mon Aug 25 10:36:55 PDT 2008
Well Stoustrup should be the last speaking about multicores, he
better stick to single core.
Let me explain.
The experience learns that most C++ code from BIG companies not to
mention organisations is factor 5 to 50 slower
than an imperative implementation. Templates get used to declare
variables and classes are very deep, not seldom
10 subclasses deep before you actually see a few lines of code doing
something, and you
never know which object gets allocated now and deallocated there.
Therefore for highend computations C++ is not very interesting.
Add to that, the C++ standard (iso) where Bjarne has contributed to a
lot (deep respect for that),
costs hundreds of dollars to buy,
so there is no clear hard definition easily available to programmers
at home to figure out the optimization
limitations that C++ allows. To get speed you need to know the exact
borders which compilers must follow.
int a = 5;
unsigned int x = 2;
if( a == x )
how C treats the above is easy. how does C++ treat it?
Do you know?
To program code for speed you need to know the EXACT limitations of a
Clear definitions, not 5000 pages with what the language all "might
be able to do for you".
No one who learns at home is gonna pay to get that ISO of course and
the language is getting that complex and even more
complex, that programmers who try to learn it are busy half their
life learning it. After many years, just knowing how to code C++,
they already are too old to program a lot and feel ready to become
teamleader or manager. This is because C++ is the most
complex programming language on the planet. It has changed. I've got
some C++ books from start of 90s here and none of them
mentions things like templates.
The C++ from the 90s was very useful for companies, had it been
Bjarne made c++ too complex however.
College students who start C++ now, directly start using templates
and never learn how to actually DECLARE a variable anymore.
Object orientation is the opposite of what modern processors are good
at. First of all object allocation and deallocation is real
slow and even the best C++ programmers have problems limiting the
number of allocations that makes their software real slow.
Additionally putting together code and data, as well as things like
templates, makes code sizes real massive huge.
This where for crunching power we'll see more and more tiny
processors where having a lot of code is just slowing down.
That said, C++ has basically a number of advantages over JAVA and C#.
Graphical you can do the same in visual studio
with C++ like you can do with c++, so there is no reason to program
in C#. In C++ you CAN incorporate C code easily
as well as compiler intrinsics, even entire assembler programs (gcc).
So you DO have the choice to hire a programmer who
can speedup your code.
The good C++ programmers who are really good in getting code done,
usually have a low grade highschool,
no university or at most 1 year college or so, if at all and know
relative little about algorithms let alone optimization techniques.
That's your typical C++ coder. Bugfree code that's ugly slow.
Over the past years i've helped out dozens of PHD's who didn't know
how to speedup their C++ code at all. Not even where to start.
They know books from Stoustrup from head though and are in the
knowledge of all kind of details. Usually not seldom within days
that results in factor 2 to 3 speedup.
Writing yet another book with things that even most C++ scares in C+
+0x is not very interesting IMHO, and just shows how much of
a nerd a person can become.
I'd argue there is a big need for a new language that is basically
imperative, where there is mechanisms, but not necessity,
to split code and data, where you can declare anywhere new
temporarily variables, and which has the potential to get the same
speed like C code and where the language constructs are not far away
from C/C++, to get programmers not extra confused.
So instead of C++ something like Cr with the 'r' of 'realistic'.
Something that is really usable for companies to get fast code
at tiny processors meanwhile compatible with C libraries, which
dominate the open source world, with good reasons.
So just the basic minimum that you need to make out of C a language
that big companies can use, without losing speed.
Speed matters for mass software and highend.
C++, JAVA and C# are just too slow to take a lecture with the below
Instead of trying to standardize the manner how to write a program in
C++ writing in clear statements that all kind of complex C++
language such as templates should get avoided at all costs, except
when it has a clear benefit that other simpler straightforward code
doesn't offer the opposite is gonna get spoken out in the speech.
What happens now with C++0x is yet another nerd addition to make
worlds most complex language even more complex.
On Aug 22, 2008, at 6:31 PM, Peter St. John wrote:
> In this interview http://www.devx.com/SpecialReports/Article/
> 38813/0/page/1 Bjarne Stroustrup talks about an upcoming C++ ISO
> standard, C++0x (the same nomenclature as "C89", "0x" means the
> specific year is undecided, it doesn't mean hex :-).
> He categorizes the additions in three ways, Concurrency, Language,
> and Libraries; the concurrency part is about multicore support.
> He writes, 'Basically, the "concurrency" features will standardize
> the basic layers needed to do systems programming in a multi-core
> world. Obviously, facilities for doing that already exist in C++
> implementations, but they are not standardized. I'd have liked to
> see library support for some high-level concurrency models, but the
> committee didn't have the time or consensus for that.'
> Beowulf mailing list, Beowulf at beowulf.org
> To change your subscription (digest mode or unsubscribe) visit
More information about the Beowulf