So, I added in rudimentary garbage collection to Tornado. Nothing fancy, but enough to clean up after itself as its running. (Not as it exits yet, though -- still leaks then)
It only builds as packaged on OS X, and requires perl (but, then, if you're on OS X you have perl) and the docs are abysmal to non-existant, but if you want to play it's at http://www.sidhe.org/~dan/things/tornado-0.01.tar.gz. It's under the BSD license, so it's pretty much a go for it, good luck sort of deal.
It ought to work on Linux if someone kicks the config system a little. I'm working next on getting it to build on Windows, and that should be interesting only because the threading's so different there.
Don't expect much threading, though. This is, right now, entirely vector oriented, with the sole exception that calling into the interpreter to execute a function spawns off a thread and that function runs in the background. The cool tornado threading stuff comes next, but one thing at a time. Good chunks of vector functionality are still missing, and It's also not too friendly to program in either, but that's OK too. It does enough for me to hang more stuff onto it, and I'm fine with that.
If you play with it, expect to make friends with gdb, though. :)
And before anyone decides to mention it, yes, it does have a big function pointer table and do indirect function calls for opcode dispatch. There's enough indirection in place to fix that later, but opcode dispatch time is, bluntly, noise for Tornado right now if it's operating on any real data. Adding together two 100K element vectors (which can be done with a single op) eats more time in memory wait time than all the opcode dispatch overhead in your entire program.
This may change as the threading ops get added in and I start doing more work with threads rather than vector data, but then I go and massage the opcode function code generator to emit a switch statement or computed goto core or something. Or bite the bullet and write a JIT. Something like that.
Posted by Dan at August 20, 2006 11:00 PM | TrackBack (0)It doesn't build out of the box, some file seems to be missing:
#575lilith:~/mess/current/tornado-0.01$ make cc -O3 -I. -c -o src/runloop.o src/runloop.c In file included from src/runloop.c:4: include/tornado.h:137:35: include/internalembed.h: No such file or directory make: *** [src/runloop.o] Error 1Posted by: Christian Neukirchen at August 21, 2006 06:15 AM
Fixed, along with the linux build issues (it does now), some mmd cleanup, more (for reasonably small values of 'more') documentation, and one or two other things that I forget at the moment. Enough to cut a 0.03 (and a very short-lived 0.02) release.
Posted by: Dan at August 21, 2006 10:30 PMThank you! I haven't tried building it (or the fixed version), but I have been waiting for this release for my own curious interests.
Posted by: Max Lybbert at August 22, 2006 03:17 PMWell, you're welcome. I should cut a 0.04 release soon, as I've got the perl bindings closer to done. Another day or so and they should be, which makes the engine significantly more useful, and testing a whole lot easier.
Posted by: Dan at August 24, 2006 10:20 PMDo write a JIT! Or, better yet, compile it all down to GPU shader code and do all the massively parallel vector stuff on the massively parallel vector processor you already have in the computer! Yeah, I've been spending too much time with graphics people.
Posted by: anonymous at August 25, 2006 04:09 AMDo write a JIT! Or, better yet, compile it all down to GPU shader code and do all the massively parallel vector stuff on the massively parallel vector processor you already have in the computer! Yeah, I've been spending too much time with graphics people.
Posted by: anonymous at August 25, 2006 04:09 AMThe scary thing is that I have actually considered compiling it to GUP shader code in some instances -- it's actually on the list 'o things to consider for the future. It'd have to be conditional, since you'd have to check at runtime which GPU you had (unlike the CPU, which you can sort of know at compiletime, though checking at runtime to see what vector extensions are available is sensible too)
Probably not for the 1.0 release, but for the future, who knows?
Posted by: Dan at August 25, 2006 06:38 AM