[Beowulf] Teaching Scientific Computation (looking for the perfect text)
Many of your questions may have already been answered in earlier discussions or in the FAQ. The search results page will indicate current discussions as well as past list serves, articles, and papers.
Robert G. Brown rgb at phy.duke.eduTue Nov 20 14:38:30 PST 2007
- Previous message: [Beowulf] Teaching Scientific Computation (looking for the perfect text)
- Next message: [Beowulf] Teaching Scientific Computation (looking for the perfect text)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Tue, 20 Nov 2007, Nathan Moore wrote:
> RGB, Thanks for the references. Oh btw, the link to the C projects seems
> broken.
Oops, looks like I overloaded the term "project" and overwrote it with a
later upload of the latex project template. My bad. I'll fix it and
repost, but probably not for a wee while yet, not today...
rgb
>
> Nathan
>
> On Nov 20, 2007 2:23 PM, Robert G. Brown <rgb at phy.duke.edu> wrote:
>
>> On Tue, 20 Nov 2007, Nathan Moore wrote:
>>
>>> After reflection though, I've started to wonder about the wisdom of my
>>> choice. Specifically (like RGB), I love the GSL library, and extending
>> GSL
>>> to fortran in an intro class is non-trivial. Additionally, most vendors
>>> supply "fast" hardware libraries in C (I may be ignorant, but if a
>> student
>>> wants to call an AMD ACML fast-math function(
>>> http://developer.amd.com/acml.jsp), or write a linear algebra function
>> to
>>> run on a graphics card(http://developer.nvidia.com/object/cuda.html),
>> the
>>> vendors seem to assume that you'll write the code in C).
>>>
>>> Also, and more relevant, I assume that most employers word-associate
>>> "Fortran is to backwards as C is to competence".
>>>
>>> So, I'm thinking about reworking the class to favor C, and fearing 3
>> weeks
>>> of pointer and addressing hell. For those of you who teach scientific
>>> computation (and also those of you who hire undergrads), I'd be grateful
>> for
>>> your thoughts. One specific question I have is what text covers
>> scientific
>>> programming and touches on MPI using the C language.
>>
>> Ah, grasshopper, you have finally managed to snatch the stone. (Or is it
>> drink the kool-ade, I never can remember...;-)
>>
>> Let's see. There are some truly excellent books that have helped my
>> independent study students on programming (most of whom are trained in
>> Java only these days, God help us all:-( learn C. There are also two
>> free online C reference manuals, three if you count Gnu's (which
>> unfortunately is by far the worst of them). I will endeavor to provide
>> you with a short shopping list, as I keep pretty much a complete C
>> programmer's reference toolkit on my laptop at all times including the
>> two aforementioned C textbook/manuals, various other free/online
>> manuals, and of course the man pages. Even though I write a LOT of C I
>> still have to look things up -- what programmer doesn't? When I'm
>> online I have even more access to free resources as GIYF.
>>
>> To my mind, the most difficult aspect of programming in linux for a
>> newbie isn't the compiler, it is the programming environment and
>> learning how to create a project directory, put it under subversion (or
>> possibly CVS) control, pick a text editor (not a WYSIWYG WP, an editor,
>> ideally one that groks compilation and make), and write that first hello
>> world program. The second longest thing is teaching them a sane way of
>> getting variables off of the command line and into a program, especially
>> when some of the kids have never really used a command line at all in
>> the past. Drop the mice, guys -- fingers on those home keys! That's
>> where you type, after all...
>>
>> This process is greatly sped up if you provide them with a "standard
>> program template" like the one here:
>>
>> http://www.phy.duke.edu/~rgb/General/project.php<http://www.phy.duke.edu/%7Ergb/General/project.php>
>>
>> which can create a work directory for you by running a little script and
>> prepopulate it with a functional Makefile and a set of hello-world
>> sources complete with a routine that parses the command line and can
>> fairly easily be hacked to add new CL arguments. Note that this
>> template is always changing and you'll like have to modify it and test
>> it to meet the needs of your students, but it will TREMENDOUSLY improve
>> your ability to grade projects as they can "make tgz" and ship you a
>> project tarball, ready to unpack, build, test.
>>
>> I personally like the jove (Jonathan's Own Version of Emacs) for all
>> text editing because emacs is maddeningly complex, crufted, overladen
>> with features, and hence all but unlearnable. jove installs easy, there
>> is a teachjove tutorial that will walk students through all they need to
>> know to use jove as a semi-IDE, and you're done. I've got jove
>> tarball/rpm's, or it is in debian ready to roll from what I've heard
>> (what isn't?:-).
>>
>> One of the two C books I'd recommend is here:
>>
>> http://www.phy.duke.edu/~rgb/General/c_book.php<http://www.phy.duke.edu/%7Ergb/General/c_book.php>
>>
>> which is a legal mirror of the original book. Note well the license is
>> a "beer" license. You have to buy the authors beer if the opportunity
>> to do so presents itself. This may present problems for your students
>> if they are underage, but I imagine the authors of the book will be down
>> with that. So each student can mirror my mirror, or they can find the
>> original online with google or otherwise and mirror that. That way they
>> can have an entire, quite readable book on C, replete with cut-n-paste
>> examples, free, installed on their personal computers where it is always
>> handy and useful.
>>
>> This is a "beginner" level book -- complete enough for simple code, but
>> not really up to snuff on things like threads or advanced data
>> structures. For the SERIOUS student, or the student working on an
>> advanced project where forking, threads, and so on are necessary, I'd
>> recommend that they use Dave Marshall's book:
>>
>> http://www.cs.cf.ac.uk/Dave/C/CE.html
>>
>> This is a GREAT book. A full out, pro-grade book on C including some
>> very advanced stuff. Parts are a tiny bit dated -- the first chapter of
>> the book deals with CDE on Solaris -- but it is a killer reference.
>> Online access is free, and if you contact Dave regarding redistribution
>> of the book to a class full of students in PDF format (which he has, and
>> for that matter so do I) he might be open to it. He sent one to me
>> willingly enough when I asked him about it, so I've got it on my laptop
>> for eternity, network or not. He was going to look into a Gnu OPL for
>> it when last we communicated. At this point I'd suggest (to him)
>> throwing it up onto Lulu for cheap download in PDF or paper print with a
>> reasonable markup -- he'd make money and students would get a generally
>> lovely book in whatever form(s) they prefer.
>>
>> Then there are a variety of algorithm books or programming environment
>> books I like to recommend to students I'm teaching:
>>
>> * King Abel and Graham Glass's book.
>>
>> http://www.amazon.com/Linux-Programmers-Users-Graham-Glass/dp/0131857487
>>
>> I've used this book since it was just glass and Unix instead of Linux.
>> A classic. Way too EXPENSIVE a classic at $84, but a classic.
>>
>> * Mastering Algorithms in C (O'Reilly Seahorse IIRC). Excellent
>> reference for stock-in-trade stuff like data structures, linked lists,
>> sorting, numerical methods (to a point).
>>
>> * Kernighan and Pike's The Practice of Programming. I'd actually make
>> this a requirement for any new C programmer. It covers things like
>> INDENT YOUR GODDAMN CODE AND I REALLY MEAN IT, and IF YOU DON'T COMMENT
>> YOUR CODE YOU WON'T UNDERSTAND IT YOURSELF TWO WEEKS FROM NOW, and WHAT
>> THE HELL IS aRp IN YOUR CODE? DOES THAT MEAN SOMETHING TO YOU ASIDE
>> BESIDES "BARF"? so that you don't have to yell QUITE so much at your
>> students and has lots of other wisdom as well.
>>
>> * Optionally Kernighan and Pike's The Unix Programming Environment
>> isn't quite as good as Abel and Glass, but it is still damn good and and
>> excellent reference.
>>
>> For numerical methods per se, well, there is STILL Numerical Recipes in
>> C, but I no longer use it in any code because it sucks in so many ways.
>> It is encumbered, with a code-reuse license out of the dark ages, I mean
>> a really, really, really bad one (in spite of the fact that some of the
>> code they are trying to encumber comes right out of the literature). I
>> personally think that all they need is the GSL itself and the GSL's
>> manual, online or otherwise. At this point anything you're at all
>> likely to have beginners doing is well-supported there, with
>> documentation and code examples, with a list to ask difficult questions
>> on. And yes, they can buy a paper copy of this from Amazon (and help
>> support the project at the same time). And it is even cheap.
>>
>> My actual favorite numerical methods book is alas in fortran --
>> Forsythe, Malcom and Moler -- but all that they really need from any
>> such textbook is a two lecture discussion on discretization error and
>> bad ways of doing what appear to be straightforward tasks because
>> computers do discrete arithmetic. If the course were going to FOCUS on
>> numerical methods, e.g. derive a 4th-5th order RK ODE solver and code
>> it, you'd likely need t textbook to help, but to USE an RK ODE solver --
>> just the GSL, just the GSL.
>>
>> The last reference I like to recommend is (of course) Knuth's TAOP.
>> 'Nuff said. Expensive as hell for the full set, but it IS the only
>> reference you'll ever need, unless you plan to do network programming in
>> which case you'll likely need one or more of Stevens' excellent books,
>> or plan to do systems programming at the kernel level, in which case
>> you'll need several books I'm not going to list here, or MPI or PVM, in
>> which case you'll need -- what? Well there are a few excellent books
>> from IIRC MIT press on them, but they may be dated at this point. There
>> are the many superb articles on www.clustermonkey.new and in the Linux
>> Magazine archives. Again, having a good template goes a long way --
>> there is a PVM template on my website but I don't use MPI (or PVM, much,
>> anymore) so you'll have to get them from other folks.
>>
>> I've found that some subset of the *'d references and free references
>> above can take a student that can program in ANY language already and
>> make a credible C programmer out of them in a semester.
>>
>> And jeeze, man. Pointers rock. If you want students to actually learn
>> how computers work so that they can UNDERSTAND what they are doing they
>> are peerless (if painful) instruments of learning. Want a block of
>> memory? Go get it, lay it out, access it, all with fairly high level
>> commands. Want to overlay a secondary addressing scheme on top of it?
>> Sure, why not. Allocate a vector, pack its addressing into a ***pointer
>> to make a matrix[][][] that you can still pass to an ODE solver that
>> wants vectors only, while addressing it in a completely natural way in
>> the deriv evaluator. You can do things in C easily that you can't do AT
>> ALL in other languages, all because of pointers and the ability to
>> recast variables. Sure, you can break a program more horribly than you
>> ever could in Fortran (although I've managed to break fortran pretty
>> horribly). That's why you get them K&P and make them read it FIRST, and
>> why you teach them about adding
>>
>>
>> #define MYDEBUG(b) if ( (verbose == b) || (verbose == D_ALL) )
>>
>> typedef enum {
>> D_QUIET,
>> D_ALL,
>> D_V_2,
>> D_V_3,
>> D_V_3,
>> N_DEBUG };
>>
>> into their primary program header and sticking:
>>
>> x = 1.0;
>> MYDEBUG(D_V_1){
>> fprintf(stderr,"# This is my subroutine 1, and variable x = %f\n",x);
>> }
>>
>> chunklets all over their damn code as they write it. Run the program as
>>
>> $myprog -v 2
>>
>> and out spews:
>>
>> # This is my subroutine 1, and variable x = 1.000000
>>
>> Run it as
>>
>> $myprog
>>
>> and it doesn't. I instrument my code so that at any instant I can get a
>> completely verbose picture of everything it is doing as it goes along,
>> or "zoom in" on just one subroutine. It is tricks like this that make C
>> programming robust and doable. One should do it in any language, of
>> course, but in C it is ESSENTIAL to make sure that the program is doing
>> what it is supposed to be doing, not overwriting array boundaries, and
>> so on. In fortran you are lulled into a false sense of security because
>> you THINK the compiler or runtime engine will catch errors for you when
>> in fact there are lots of errors they will miss, and then you are REALLY
>> dead.
>>
>> HTH,
>>
>> rgb
>>
>>> regards,
>>>
>>> Nathan Moore
>>>
>>>
>>>
>>
>> --
>> Robert G. Brown
>> Duke University Dept. of Physics, Box 90305
>> Durham, N.C. 27708-0305
>> Phone(cell): 1-919-280-8443
>> Web: http://www.phy.duke.edu/~rgb <http://www.phy.duke.edu/%7Ergb>
>> Lulu Bookstore: http://stores.lulu.com/store.php?fAcctID=877977
>>
>
>
>
>
--
Robert G. Brown
Duke University Dept. of Physics, Box 90305
Durham, N.C. 27708-0305
Phone(cell): 1-919-280-8443
Web: http://www.phy.duke.edu/~rgb
Lulu Bookstore: http://stores.lulu.com/store.php?fAcctID=877977
- Previous message: [Beowulf] Teaching Scientific Computation (looking for the perfect text)
- Next message: [Beowulf] Teaching Scientific Computation (looking for the perfect text)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Beowulf mailing list
