Slashdot Log In
Hacker's Delight
from the yes-that-kind-of-hacker dept.
| Hacker's Delight | |
| author | Henry S. Warren Jr. |
| pages | 320 |
| publisher | Addison Wesley Professional |
| rating | Excellent |
| reviewer | Ben Olmstead |
| ISBN | 0201914654 |
| summary | Collected Tips & Tricks for Programmers |
Hacker's Delight is an impressive compendium of clever tricks for programmers. Warren concentrates on micro-optimizations -- few of the tricks in this book operate on more than 3 or 4 words of memory -- and he displays an impressive knowledge of diverse computer systems in the process.
Who Should Read This Book
Hacker's Delight is hardcore in its presentation and subject matter. I would not recommend this for a beginning programmer -- to fully understand the material requires at least some knowledge of concepts such as Assembly and Machine languages. However, anyone who writes performance-critical software should read this book, even if they do not plan to write Assembly code, both to learn the tricks given, and to learn the concepts behind them.
What's Good
The book is organized into chapters where Warren presents related tricks. In each chapter, he presents a few tricks which perform related tasks -- for example, in Chapter 3, he presents tricks for rounding (up or down) to the next power of 2, rounding to a multiple of a known power of 2, and detecting power-of-2 boundary crossings (i.e., checking for page faults). For each trick, he discusses why it works, whether the technique is generally applicable, related tricks which might be better in specific situations, and where a trick might be used in the real world.
Warren keeps his discussion architecture-neutral, while noting optimizations and problems for specific architectures for specific tricks -- in the process, he displays a vast array of knowledge about specific processors, from 1960's mainframes to x86, MIPS, PPC, Alpha, and others. He also skims the surface of hardware-design issues in a few places -- for example, he devotes a page or two to explaining why computers use base 2 for arithmetic, and why this is the most efficient choice.
What's Bad
This is an extremely dense book, and there are sections which are difficult to understand. Furthermore, there are many tricks which, while interesting, would be difficult to apply to real-world applications, and use of these tricks does violate the Keep It Simple, Clock Cycles Are Cheap And Someone May Have To Understand Your Code philosophy which is harped upon so heavily (not without reason) in modern software design. However, someone writing a compiler or high-performance code may feel that the benefit outweighs the potential risk.
The Summary
If you want a better understanding of the hardware on which your code runs, or you need to squeeze clock cycles, or you just enjoy seeing clever tricks, this is an excellent book. If you primarily use high-level languages such as VB, perl, python, etc., this may not be the right book for you. Be prepared for very dense material.
You can purchase Hacker's Delight from bn.com. Slashdot welcomes readers' book reviews -- to see your own review here, read the book review guidelines, then visit the submission page.
Sounds like an interesting read... (Score:5, Funny)
To be honest, 'Hacker's Delight' sounded more like a cookbook title.
omg (Score:1, Funny)
i said a hip hop a hippie the hippie
to the hip hip hop, a you dont stop
a rock to the bang bang boogy say upchuck the boogy,
to the rhythm of the boogity beat.
now what you hear is not a test, i'm hacking to the motherfuckin beat
and me, rob malda, and the rest are gonna try and move your feet
see i am timothy and i'd like to say hello
to the ACs, freaks, and logged-in kooks, and all the goatse trolls
but first i gotta bang bang the boogie to the boogie
say up jump the boogie to the bang bang boogie
let's rock, you dont stop
rock the rhythm that will make your body rock
well so far youve heard my voice but i brought two friends along
and next on the mike's my man hemos
come on, hem, sing that song
Dubious value? (Score:5, Insightful)
Maybe you should break open the old CS textbook instead. IMO, learning general principles would be a much better use of your time.
Re:Dubious value? (Score:5, Insightful)
I remember back when I was younger and had much more free time (*longing sigh*) I spent most of a term and a summer writing a 3D wolfenstein-like engine, mostly under the careful instruction of a book: Tricks of the game programming gurus [amazon.com]. The book was great, and though it gave some optimizing ideas here and there the resulting engine was very slow (esp. compared to the wolf3d engine, which was so perfectly smooth... and the engine I made didn't even do monsters and doors and items). So then I turned to another book I had, called "PC Interdit", which was written in french and oriented towards Pascal rather than C which I was using, but explained a number of optimization tricks which made all the difference (examples: page flipping in mode X instead of double-buffering in mode 13h, basics of coding fast assembler functions to optimize C functions, etc). Before using that book's advice, my engine would run at something like 10 fps or so on my 486DX4 100Mhz in turbo mode, and 1fps more or less without turbo mode... After the optimizations, it ran very smoothly in turbo mode and at least 5-6fps in non-turbo.
So if you're programming a game engine, those books are really really useful. Or in fact if you're programming anything where squeezing every tiny bit of performance is critical. If you're programming a J2EE servlet engine, though, then for sure, it's a waste of your time.
Daniel
The author.. (Score:5, Informative)
Henry S. Warren, Jr., has had a forty-year career with IBM, spanning from the IBM 704 to the PowerPC. He has worked on various military command and control systems and on the SETL project under Jack Schwartz at New York University. Since 1973 he has been with IBM's Research Division, focusing on compilers and computer architectures. Hank currently works on the Blue Gene petaflop computer project. He received his Ph.D. in computer science from the Courant Institute at New York University.
Hacker delight.... (Score:4, Funny)
Sugar Hill Gang, anyone? (Score:5, Funny)
What you hear is not a test, I'm hacking to the beat. And me, the compiler, and my code are gonna start to move your screen.
See, I am das MB and I'd like to say hello
To the linux loners and the mac fairys and the losers on windows.
But first I gotta..bang slash bin slash P E R L said hack kernel yes hack hack the kernel until the whole machine runs like hell.
Proper.
Refreshingly different for the CS bookshelves (Score:1, Insightful)
Sounds cool (Score:4, Interesting)
Sounds like he knows his stuff. The world needs more asm-aware programmers. High level languages and all the trickery that is "keep the source simple, waste the abundant cycles" and all are important things. The problem IMHO is that these are techniques to be applied by a fully-fledged programmer, who is capable of doing it the hard way in C or even asm - but too many modern programmers have only ever know the world of OO languages. The Leaky Abstractions paper applies here too.
If you like this idea.. (Score:5, Informative)
If you like this topic you may well appreciate this Assembly Language Gems Page [df.lth.se]
It's a little biased towards x86 assembly, but there are some neat tricks there, and some stunningly lovely code.
Recommended (Score:3, Informative)
Jim Green
Base 2 (Score:2)
Why is that? I always figgered it had something to do with it being easier/cheaper to build hardware that only needs to store and detect 2 states (on/off) than multiple intermediate states.
Re:Base 2 (Score:5, Informative)
Binary maths make many integer operations ridiculously simple, and while the fact that it's cheaper and more feasible to detect 2 states than 10 is true, there's also a certain simplicity that you can get to by coding everything with binary logical gates which wouldn't quite be there if you used some sort of decimal logical gates...
Basically, binary arithmetic is really simple so can be optimized really well and is much more universal, in the wider philosophical sense, than decimal arithmetic. Everything in the universe seems to revolve around a binary concept, rather than a decimal one... matter/antimatter, existence/non-existence, quantum spin states, etc.
Daniel
Definition of "Hacker" (Score:4, Insightful)
Definitions, Titles, and Categorization (Score:5, Interesting)
Now I know that I'm toying with the usual hacker/cracker jihad. None the less, it seems the definition of "hacker" associated with secuirty is so engrained in to society that it manages to overcome even the content of the book itself. I would have thought the B&N folks, being in the book profession, would manage to catch this. Judging a book by its cover and all that (makes me wonder where a book called 'Pinky Fuzzy Bunnies' that studies furry erotica would land).
Of course, B&N are not the definitive measure of language. Where they stick a book doesn't go much beyond acknowledging one use of our much-flamed word. It doesn't negate the history of the word nor offer final proof of its popular definition. But it does show the power of that popular definition despite the obvious intent of the book's author.
Be it for good or not - there it is.
Efficiency != Portability (or overall goodness) (Score:4, Insightful)
That's not to say that I don't enjoy reading about these clever things; there is a lot to be learned by studying this stuff. But implementing them is usually a mistake these days, if for no other reason than because there's already a portable way to do it which is probably more efficient. To go back to the Duff's Device example, almost all compilers will implement loop unrolling already. And that's a C-language trick, supposedly already a high-level language. Note I said supposedly! :-)
Be Wary (Score:4, Funny)
To paraphrase the great Terry Pratchet: "Beware labour saving devices which are smaller than their manuals".
My computer won't work hard enough (Score:2, Funny)
Ingrate! If it weren't for me, it'd be running gene sequences all day and night. Computers have no sense of perspective.
the most important thing (Score:1, Funny)
oh please (Score:2, Interesting)
Efficiency of base 2 arithmetic (Score:1)
I always thought that ternary computers [google.com] were theoretically more efficient, from a mathmatical point of view.
Hard to understand? (Score:5, Interesting)
In some cases, this may be true, but not always. If you want to increment a multiple-precision value, the textbook method is while the "cute trick" method is
The textbook method takes a while to recognize, just because it's very similar to many other loops; but the second is distinctive and can be recognized immediately. If I'm maintaining someon else's code, I'd much prefer to see the second.
Redundant and proud of it (Score:2, Interesting)
Whoa! (Score:3, Funny)
I almost thought that was 31337 or something!
And all this time (Score:2)
HACKMEM (Score:5, Interesting)
Here's a sample:
HACKMEM [inwap.com]Re:HACKMEM (Score:4, Interesting)
All prime factors of 2^p-1 are of the form 2kp+1 for some k. If we're looking for a factor, the obvious place to start is with k=1, which tells us that we should look at 2*239+1 = 479.
Now, 2^7 = 128, so
2^14 mod 479 = 98,
2^29 mod 479 = 2*98^2 = 48
2^59 mod 479 = 2*48^2 = 297
2^119 mod 479 = 2*297^2 = 146
2^239 mod 479 = 2*146^2 = 1
so 2^239-1 is a multiple of 479.
Premature optimisation is the root of all evil (Score:4, Interesting)
I've not read the book yet, but I do have a general worry, that optimisation isn't always done in the right context or for the right reasons. Code that runs faster in a small test program can break when part of a larger program (by thrashing the cache for example). What's the point of optimising something that's seldom invoked, in other words, always ask an enthusiastic optimiser to show you their profiling results.
My favourite hacks are Jim Blinn's floating point tricks - 10% accurate square roots and reciprocals that blow away a floating point unit and are just what you need in graphics and games.
con.* files on NT or 2K, won't let you, try it (Score:2)
Try creating or renaming any file or your system to con.* * could be anything like .html .jpg .txt. The OS won't let you, it'll give an error. NT and 2K give different error mesasages. Under NT it just says the name is used already. Under 2K it says it's a reserved device name.
Karma whoring (Score:1)
Performance Critical (Score:1)
Hey, that's one of my Christmas gifts! (Score:3, Informative)
I got this book for Christmas because I specifically asked for it. My mom was a bit put off by the title, though. The title refers to the original definition of "hacker," so don't get excited if you're all about computer security. There's nothing in there for you.
One of my favorite concepts in this book is the author's use of non-breaking code. As many of you know, the mechanism for sending instructions to the CPU requires a bit of quasi-premonition. Riddle your code with many if-, while-, and (the hideous) goto-statements, and you will end up with slow code due to the seemingly random jumps inside memory. Use some of the methods in this book, however, and you will end up with more efficient code in the longrun. Need I remind you of the speedup generated when you use non-breaking code within a lengthy while loop?
Hacker culture (Score:2, Informative)
But unfortunately, the other people on my team do none of that, and it would only be more painful if they were trying the sort of stunts this book focuses on.
Shouldn't my compiler be reading this book? (Score:1)
And then let my compiler read through my code and determine the most efficient way to turn it into assembly? I mean, I would rather be multiplying by 2 rather than bitshifting; and then let my compiler turn it into whatever it needs to in order to run the fastest.
In fact, I really wouldn't be surprised if many of the better compilers already do most of these tricks for us, and we don't even know it.
But then again, I can't say for sure, since I have not read the book
Re:I've read this book (Score:2)
http://www.amazon.com/exec/obidos/tg/detail/-/020
Doofus! (Score:1)
Re:I've read this book (Score:1)
OK, it's good Slashdot Karma, but think what this is doing to your *real* karma -- much more of this and you're heading for reincarnation as a nematode worm
Re:Commodore 8-bit (Score:2)
Whoever modded this as a troll should be slapped. It is a legitimate question.