[Beowulf] El Reg: AMD reveals potent parallel processing breakthrough
Lux, Jim (337C)
james.p.lux at jpl.nasa.gov
Sun May 12 09:09:39 PDT 2013
On 5/12/13 8:29 AM, "Vincent Diepeveen" <diep at xs4all.nl> wrote:
>On May 12, 2013, at 4:07 PM, Lux, Jim (337C) wrote:
>> On 5/12/13 4:01 AM, "Vincent Diepeveen" <diep at xs4all.nl> wrote:
>>> You find it a cool idea to learn students how to drive a moped and to
>>> steer well with a moped
>>> in order to let them understand the problems of how to fly an
>>> airplane, meanwhile at home they got a car?
>>> They will never respect you in this manner, and they are da*** right
>>> doing that.
>[SNIP] <lawnmoyers and such>
>If you want to train a new jetfighter pilot, you're going to just
>give them a course how to drive a moped,
>and after they can drive a moped, you are going to give them a pilot
>license and wave good bye to
>them: "good luck to you flying your own Cessna".
My goal isn't to train fighter pilots..it's to teach basic flying skills.
Some fraction of the people will then decide "yes, flying is my life" and
go on to be fighter pilots or whatever. Others will say, "that's nice"
and go on to do other things, but will still remember the basic flying
skills, so when they are a manager of, say, control towers, they'll have a
better understanding of the use case.
Interestingly, there's a whole variation of approaches in training
commercial pilots (for large planes, not commuters). One group, familiar
with the 70s, where you had a lot of pilots coming out of the Vietnam war,
looked at it as "retraining" from military transports, etc. to civilians.
Another group, the "stick and rudder" types believed in a gradually
increasing complexity approach. This is enshrined in the pilot licensing
in the US.. You get Airplane Single Engine Land Private Pilot, and then
get things like Instrument ratings, Commercial, Airline Transport Pilot,
etc. with Type Certificates for specific large aircraft (a pilot trained
on a 737 can't just go out and fly a A320). During the 80s, a lot changed
(all those Vietnam era pilots were already hired). Lufthansa went into a
new ab initio training process. Take people who had never flown before
and send them to a flight school in Arizona (cheap, good flying weather
all the time) and learn in a single engine turboprop trainer, and then
transition to multiengine jets from there.
My contention is NOT that you'd learn on an Arduino and then never do any
education beyond that. The Arduino provides a cheap, constrained platform
that could be made (with instructor supplied libraries) to be a good
platform to learn distributed algorithms, without getting involved in the
complexities of managing an actual full-up cluster. The techniques of
partitioning, trading CPU vs communication overhead, etc. can be done at
Arduino scale as well as at any other. And, because the platform isn't
just a "simpler" version of something else, when you move to that
"something else", you're forced to translate the abstractions to the new
environment, which reinforces the underlying conceptual understanding.
I think that's a lot better, pedagogically, than teaching "how to turn the
crank" on a specific library or platform.
I absolutely despised writing significant amounts of code in MIXAL to run
on the MIX machine in school (since I already knew PDP-11 Assembler, and
learned Z80 Assembler on the side when in school, and wondered why they
didn't just teach BAL, since the machine we ran on was a S/360). Writing a
kernel and scheduler in MIXAL was painful. However, in retrospect, Knuth
and his disciples were wise. When I was done, I knew 3 different
assemblers, and more important, I understood both the common aspects of
kernels AND also why some processors were better suited for some
applications than others.
My "coding skills", per se, were probably worse than if I had done all the
work, in say, PDP11 ASM (that is, I was an OK coder in all three). But my
"computer science skills" were substantially better for the experience.
Same thing applies to being forced to write in Pascal at UCSD, when I
already knew FORTRAN and Basic, and then had to do PL/1 as an undergrad at
UCLA. (in the late 70s, it was PL/1, PL/C, or CALGOL). After a few
years, after writing the same darn quicksort or bubble sort algorithms in
all those languages, you *really* are language independent. You know WHY
FORTRAN is good for some things (numerical computation) and not so hot for
others (things requiring strings or linked lists or data structures).
In summary, I think there is HUGE value in starting with a deliberately
limited cheap platform that is basically disposable.
Now, if your goal is to create a software factory in a third world country
where you have a room full of coders cranking out code from design and
requirements documents prepared by others, another strategy might be more
useful. Start them with the eventual target enviroment, don't let them get
distracted with different ways, make sure they know .NET or MFC or
whatever you want to use. That will get you coders sitting at screens and
keyboards cranking out your code cheapest and quickest. Just like textile
workers. There's no point in teaching them to sew with needle and thread
by hand: put them at a sewing machine with 100 others from the get-go.
Coding, per se, is more and more considered a clerical skill, with the
corresponding low wages and "blue collar" treatment by employers. And
sadly for all those folks going through "retraining" from lost
manufacturing jobs and learning how to write java, .NET, or Excel Macros,
or whatever, it's one that can readily be outsourced to a place with lower
living costs and even lower wages.
My goal is NOT to train the next generation of assembly line factory
workers, but to find those people who will come up with new algorithms and
fundamentally change how we do computing. I want people to figure out how
to create a generic tool that can parallelize or partition without being
dependent on the particular platform (so we can farm out the software
production work to those low paid wage slaves in third world
The way we find those people is to give them something to "play" with,
something different, something that makes them think about new ways to do
stuff. The CS community has been fooling with parallel and distributed
processing for decades, and we're not moving real fast. It's a hard
problem. Maybe solving it requires people coming from a different
background? Maybe we need a way to let those creative people find out
that they have a talent for it without spending a lot of money. Sure, I'd
love to have every elementary school in the country have a supercomputer.
But it would be expensive, it would have controlled access, and you'd have
to go through a review process to make sure that your project was "worthy"
and sufficiently low risk. Or it would have exercises carefully designed
to work with everyone in the class ("Now Class, It's time for our monthly
hour in the supercomputer lab")
So, spend $100k on a school supercomputer cluster? Or spend that same
$100k on 100-300 copies of a "cluster computing toy"?
The latter is, I think, the way to advance the state of the art for High
Performance Computing. I want that bright 8 or 12 or 16 year old who has
the flash of insight about distributed computing to get interested. By
the time they get through school, maybe they'll be in a position to make a
substantial contribution, rather than being resigned to being a third
assistant java coder for the upper left corner of the window border.
More information about the Beowulf