Been making position independent versions of the data structures.
So far : freelist, stack, queue (unbounded many many), queue (unbounded single single).
Made tests for the position independent stack, they pass.
Need to make tests for the rest, and also make the position indepenent btree and lists.
Have to think about the freelist elimination array and position independence (I think it’s just okay – works no changes) and have to think about position independence and the SMR methods.
Again, I think they just work – have to switch them over to offsets internally, but that’s all – so it should be possible to make position independent versions of the SMR-using data structures.
The next thing though will be a quick extra benchmark for the freelist, to properly benchmark the elimination array. Gym first though 🙂
Been busy visiting museums the last three days.
However, have now a compiling freelist which uses offsets (i.e. for shared memory use).
Then have to make offset versions of all the existing data structures.
I’ve opted to use a new API in each case, so the docs are simple to explain, and it seems reasonable that when an instance is being used with shared memory, it will be distinct in its use to other data structures. It would be possible to overload the pointers in the current data structures, so they’re used for offsets, and then you could do things like pop from a shared memory freelist and push to a non-shared memory freelist, but then you have to explain to users all the caveats about use, and users have to make sure they don’t blunder into error.
It also strictly breaks ANSI, since it means I have to assume a pointer type can hold all the values in a ptrdiff_t. I can’t imagine a platform where this isn’t true, but I know I don’t know much.
Both SMRs now passing their (prety minimal but actually testinge everything) tests, at least on x86_64.
Will run a build-system wide build in the morning.
Removed 4.5.4 on mips32 – it seemed to fail to align correctly, which caused one of the test asserts to trigger immediately.
I think now everything should be right – I’ve now issued the full build. It’ll run overnight, and we’ll see in the morning.
Found and fixed a bug in DWCAS on 4.1.2 – 4.7.3 (related to the previous bug) and now that platform passes tests.
Have an all-compilers, ar-rel only build running now and I expect it to pass.
Then at some point I’ll need to run an all-compiler, all-variants build, which takes about six hours.
That then will finish the Linux work.
Then I’ll need to check the Windows (VM based) builds are still happy, and then the build system is all systems go!
Thanks to the GCC Compile Farm, liblfds now has been built on mips64, ppc64 and sparc64!
Nicely, only ppc64 needed work – the defines in the porting layer header for the processor were wrong.
I can’t run the test programme on these platforms though – the test code runs at 100% on all CPUs for some time and would hammer the other users.
I need a plugin for firefox which will block sites, so any URL from that site is blocked.
The reason for this is not ads.
I was mentally idling, and I did something I almost never do, just out of curiosity to see what was there; I went over to news.google.com.
There’s a link on there to a story about a group of teenagers (youngish) who saw a man drowning in his pool and didn’t help him, and apparently taunted him, and recorded themselves doing so and him drowning, and they’re not going to be prosecuted under Florida law.
Okay, so far, so fucked up, but okay.
Then some sound starts to play – it’s taken a little while, the page has been loading.
So CNN have a video in the page WHICH PLAYS THE AUDIO CLIP THESE KIDS RECORDED OF THEMSELVES LAUGHING WHILE THIS GUY DIES.
So, this isn’t at all as twisted as what those kids did themselves, but it is still *pretty fucking twisted*.
Focusing currently on latest GCC archive release builds.
Fixed a bug in the 32-bit DWCAS code for GCC >= 4.1.2 and 4.7.3.
Now what I’m left with is that test goes badly wrong on i686 with 4.5.4 and 4.6.4 and on mips with 4.5.4 (but 4.6.4 on mips is fine).
Later compilers work. I don’t have versions so far back except on x86_64, which I’ve not tried yet – so those compilers currently are only for those platforms.
The problem seems to be that DWCAS goes wrong.
Just had latestgcc and release variant build on all platforms (except x64 – because I’m using it and it’s disruptive to have it going on in the background :-), test pass, and benchmark complete, and gnuplots produced.
Overnight I’ll run the full build (again, except x64, because the fan noise makes it impossible to sleep :-), all compilers, all platforms, all variants.
So, todo list;
1. full clean run of build system on all platforms and all supported GCCs
2. check GC working properly
3. implement GC-based freelist, queue and stack, and write their tests
4. complete singly-linked list (with add and delete)
5. try and figure out what’s happening with the performance of the unbounded/single/single queue
6. modify freelist to use offsets rather than pointers (for easier use with shared memory)
7. write a benchmark for the singly-linked list
1. get the bloody forum and mailing list working.