RAYFOS offers its significant know-how in GPU general purpose computing for solving compute intensive problems in cases like clinical diagnosis, spectroscopy, scientific data analysis, image reconstruction, 3D volume visualization, to name a few.
Parallel computing is a type of computation in which many calculations are carried out simultaneously. In parallel computing, a computational task is broken down in many subtasks that can be processed independently and whose results are combined afterwards, upon completion.
Since floating point units were introduced in graphics processors in early 2000, GPUs became a promising and mighty platform for implementation of general-purpose computing algorithms. Since then several frameworks have emerged that facilitate engineers to develop software on GPUs. RAYFOS has evaluated the various available frameworks (most prominent ones being Nvidia-CUDA and Khronos-OpenCL) and is focusing mainly on OpenCL although we have also worked with CUDA in several projects. As a rule of thumb, one could expect a performance improvement of 1-2 orders of magnitude in algorithms that are suitable for parallelization when they are implemented in a modern GPU.
Our expertise in GPU processing is already applied in diverse application domains. The typical workflow followed in order to optimize performance of a given algorithm is:
Analyze & benchmark the original computational algorithm to reveal the main bottlenecks which need to be evaluated further for Parallelization.
This typically creates a code structure where the parallelized blocks (kernels) are run in the GPU (or even CPU) and the rest of the algorithm runs in a higher level language.
Both multi-core CPU systems and GPU equipped systems can benefit from parallel execution
When targeting GPUs, memory transfers between host (CPU “normal” memory) and GPU memory can be a deciding factor of the performance gains