I am using an existing GCC C++ x86 Qt application that filters, displays and stores results computed by some C code. Since the computation by now got too complex for CPUs I intend to port the small C program to some GPU computing platform. So the C code should execute tasks received from the x86 GUI, running them parallelized on the GPU and send back the results for final processing.
Unfortunately I am totally new to GPU computing. I read a lot about different hardware, drivers, languages, libraries, compilers, versions etc. and I am a bit confused. I hope someone can help me to choose the right paths.
These are my requirements (most important first):
- Everything should run and build on Linux (Ubuntu)
- Since it is a hobby project, all software should be free of charge
- GPU code should be written in C (C++ would be a bonus)
- GPU code should be executable on a Tesla T4 card
- GPU code should be executable on a x86 CPU without major code changes (the development system does not have a GPU card)
- The techniques should be easy to understand by an average software engineer
- Language and compiler should support 64 bit wide unsigned integers since my C code uses them a lot (128 bit and 256 bit would be a bonus)
- Independence from the GPU manufacturer (i.e. NVIDIA) would nice
- The computation tasks will probably run months or even years, so
efficiency would be nice
- A way to build the GPU code using Qt creator (avoiding two different build chains) would be nice
Can I meet these requirements? Which tools should I choose?
EDIT: If the requirements can't be fulfilled completely, which solution would help me meeting the most important requirements at the top?