|The year I started blogging (blogware)
|Linux initramfs with iSCSI and bonding support for PXE booting
|Using manually tweaked PTX assembly in your CUDA 2 program
|OpenCL autoconf m4 macro
|Mandelbrot with MPI
|Using dynamic libraries for modular client threads
|Creating an OpenGL 3 context with GLX
|Creating a double buffered X window with the DBE X extension
|A simple random file read benchmark
|Change local passwords via RoundCube safer
|Multi-GPU CUDA stress test
|CUDA (Driver API) + nvcc autoconf macro
|CUDA (or OpenGL) video capture in Linux
|GPGPU abstraction framework (CUDA/OpenCL + OpenGL)
|OpenGL (4.3) compute shader example
|GPGPU face-off: K20 vs 7970 vs GTX680 vs M2050 vs GTX580
|DAViCal with Windows Phone 8 GDR2
|Sample pattern generator
Although I like theorizing about different sampling patterns, in practical implementations I'm only concerned about a handful of practical properties:
To nail the above points, this sample pattern generator works as follows:
Don't hate me, but this is again only for UNIX. Otoh it's only dependent on libpng and runs fine on OSX. Tweak the defines in main.cpp to your liking and: make && ./samplingsampling-1.0.tar.gz
Enjoy your PNG!
Firstly, the initial sample set doesn't cover the area perfectly uniformly, i.e. follow a maximal Poisson disk distribution. If this is a problem, a different initial distribution should be easy to drop in. Check out the literature; ways exist.
Secondly, the spatial sorting of the sets can only maintain a good coherence for all but the last couple of indices. This gives you optimal cache coherency for majority of the indices at the expense of the last few. I reckon this is generally better than having uniform but suboptimal coherency for all indices, but it depends on the HW and cache characteristics of your algorithm.