TL;DR I have 3 possible thesis subjects all involving CUDA: Developing a methodology for rewriting applications where around 50% of the code ends up on the gpu. Making a table of things to study about CUDA and in which order and how much when you have to take part in a commercial project. Comparing CUDA and Tensorflow in a non machine learning task. The first feels a weak subject, second a little stronger, the last one solid. But what do you think?
Due to the fact that my supervisor is currently unavailable and will be such for some time, I thought I’d ask feedback from a wider audience.
I have currently thought of 3 possible subjects for my master’s thesis, from which 2 feel a bit weak and one feels more solid. However please correct me if I’m wrong.
Since I have been involved in a CUDA project for the past 9 months where we port SAR algorithms to the GPU from the ESA SNAP, then an idea was to try to write down a methodology for porting code into big kernels. It feels like that we need to send around 50% of the original code to the GPU. Considering that during this project and a few shorter ones before I’ve ported a number of algorithms to CUDA, then this made sense, as it should create some habits.
However closer inspection revealed that it’s mostly about mixing functions with same loop iteration counts, which I managed to write down in less than an A4. Everything else is fine grade tuning which I can read from official NVIDIA sources. Does not feel like a deep subject. Perhaps if I had the experience of a senior developer, then perhaps, I could come up with more.
The second idea was about a question that I so far have not been able to answer, but would like to. If a new person comes to work for us and we want to include said person in a CUDA project, but naturally there isn’t a lot of funds for preparation time, then what should they learn to be able to successfully take part in the project? Let’s say that they have 5 workdays. Also what more can they learn and how much would they benefit from it?
The idea started from the fact that I know only the basic techniques for writing CUDA and I can produce reasonable results. However as I have been reading various materials my skills are imporving and so are my results, but as practice has shown, all those new skills are not essential to produce results that make your client happy. I have doubts for this subject, as it will most likely be too subjective and I don’t have something like a testgroup. However if I could produce a table on the subject, then that would be of practical use.
The third idea comes from the fact that my colleague insisted that writing SAR algorithms on Tensorflow is faster because it already has a vast math library that has all of the needed math functions. Just wire them together. He works on the same project as I do and he wrote his algorithm using Tensorflow. However as practice has shown, he greatly underestimated the complexity of porting SAR algorithms to the gpu and honestly it feels that there has been no victory in development time. It might even be slower to write on Tensorflow, but there is no objective way to know. However the subject of which is faster and by how much and under what conditions is still open and we don’t know. Answering this question would mean me writing his algorithm into CUDA and comparing the 2. This will take time, but I can afford that. This seems the most solid, as all of the comparisons I’ve seen so far are about machine learning capabilities and it would yield concrete results of what people should do or not do and under which conditions.
So these are my current thoughts. I’ve you’ve read this far I thank you already and will thank you again if you leave some feedback :)