After a few false starts, and at a bit of a slowed pace do to other academic responsibilities created some working CUDA code. The static member class is still causing some issues, but the workaround was to create a new array and overload the new and delete operators to allow CUDA to handle moving memory to and from the GPU. It is a definite step forward, but there are still several issues. GPU utilization sits quite low except for specific moments and I think that is due to a lot of the radiation calculations being on the CPU.
As you can see, the GPU does eventually catch up with the serial code, but the divisions being noted are in terms of the number of rays used for the two dimensional radiative transfer calculations. The crossover point occurs somewhere near 1000 radial and 1000 azimuthal rays, which is not particularly useful in practice. I am pleased with the start, though, as we now have compiling and running GPU code. The next task is to reassess the order and structure of the classes and member functions to put more tasks on the GPU and minimize passing information through the PCIe bus.
Comments
Post a Comment