Live data from Hacker News

Tom Duff on Duff's Device (1988)

lysator.liu.se

1–10 of 11 posts

Re: Tom Duff on Duff's Device (1988)

#3

> (Actually, I have another revolting way to use switches to implement interrupt driven state machines but it's too horrid to go into.) I'm really, really curious about what that code is.

This is just a guess, but perhaps something like: http://www.chiark.greenend.org.uk/~sgtatham/coroutines.html

Re: Tom Duff on Duff's Device (1988)

#4
"A second poster tried the test, but botched the implementation, proving only that with diligence it is possible to make anything run slowly."

This made me laugh. "with diligence it is possible to make anything run slowly" should be one of the truths carved into an obelisk outside every CompSci department or at least on a t-shirt.

Re: Tom Duff on Duff's Device (1988)

#5
I wonder what programmers at the time would think of CPUs eventually being so good at handling loops that unrolling changes from an optimisation technique to be performed manually, to one that compilers might sometimes do, to an anti-optimisation:

http://www.agner.org/optimize/blog/read.php?i=142

It is so important to economize the use of the micro-op cache that I would give the advice never to unroll loops.

http://lkml.iu.edu/hypermail/linux/kernel/0008.2/0171.html

by eliminating all instances of Duff's Device from the XFree86 4.0 server, the server shrunk in size by _half_ _a_ _megabyte_ (!!!), and was faster to boot

Re: Tom Duff on Duff's Device (1988)

#6
post #3

> (Actually, I have another revolting way to use switches to implement interrupt driven state machines but it's too horrid to go into.) I'm really, really curious about what that code is.

This is just a guess, but perhaps something like: http://www.chiark.greenend.org.uk/~sgtatham/coroutines.html

This is a very useful technique for making event driven parsers. I remember being surprised that the case statements didn't all have to be in the same scoping level, but it's true.

Re: Tom Duff on Duff's Device (1988)

#8
post #3

> (Actually, I have another revolting way to use switches to implement interrupt driven state machines but it's too horrid to go into.) I'm really, really curious about what that code is.

This is just a guess, but perhaps something like: http://www.chiark.greenend.org.uk/~sgtatham/coroutines.html

I just used it a few minutes ago: https://github.com/nraynaud/webgcode/blob/gh-pages/interpola...

https://github.com/nraynaud/webgcode/blob/gh-pages/interpola...

One problem is the reset of the functions, I just created a makeshift exception, but I don't know how far I want to deviate form the norm.

I still don't know if it's a good idea, but that's what personal projects are for.

Re: Tom Duff on Duff's Device (1988)

#9

I wonder what programmers at the time would think of CPUs eventually being so good at handling loops that unrolling changes from an optimisation technique to be performed manually, to one that compilers might sometimes do, to an anti-optimisation: http://www.agner.org/optimize/blog/read.php?i=142 It is so important to economize the use of the micro-op cache that I would give the advice never to unroll loops. http://l…

Some of that can be attributed to the fact that there are multiple integer and floating point units, so the loop counter is often totally inconsequential.

Re: Tom Duff on Duff's Device (1988)

#10

Funny that he is more famous for this than for inventing Porter-Duff compositing algebra, one of the cornerstones of modern image manipulation.

Thanks for mentioning this. I found a nice article about it and generalisation to blend modes here: http://ssp.impulsetrain.com/porterduff.html
Post reply on HN