What was the topic of your project?
Accelerating non-rigid registration using GPUs (Cuda). The project's aim was to optimise the performance of a given image registration (alignment) algorithm to be applied ultimately to medical-image data acquired from MRI and CT scanners.
Which external company/organisation did you work with?
I was working with Toshiba Medical Visualization Systems in Leith.
How successful was the project?
I initially identified the core parallelisable components of the chosen registration method, and wrote Cuda implementations of those. Speedup factors for those components ranged from around 10x to 1000x. The final integrated system wasn't quite finished by the end of the allocated project time, but as an exercise in parallelising the main parts of the method it was pretty successful.
What was the most challenging part of the project?
Histogram calculations are tricky to parallelise effectively, due to the large number of atomic memory-writes required. In the process of attempting to reduce these, quite a lot of work went into restructuring the image data for optimal memory footprint (fast shared memory on a GPU is quite small) and thread-block usage.
What was the most interesting part of the project?
Implementing a joint-histogram Cuda kernel presented a large number of challenges; in attempting to solve these, I had to learn a lot about how GPUs work at a reasonably low level, and perform some trickery on the data to allow the GPU hardware to operate on it with maximum performance. Part of the fun about writing code for GPUs is having to think about the problem in a completely different way.
How did undertaking this project with an external company/organisation benefit you?
The experience of working with a large company was really valuable: I was given the opportunity to do further study with the same organisation at doctorate level, which I am now undertaking (albeit in a slightly different area).