Graphics hardware long ceased to be used for graphics rendering alone. General purpose computing on graphics processing units (GPGPU) has been widely adopted in recent years by a broad range of industries, from data-intensive scientific simulations to automotive embedded systems which are capable of processing huge amounts of information in real-time. The computing power contained in a modern home-user GPU is comparable to super-computer capabilities from a decade ago. The highly parallel nature of GPU architecture makes it an ideal choice for vast data processing at rates that once could only be achieved by very expensive and complex-to-use computers.
As more and more emerging businesses are built around huge volumes of data (also called big data), there is an increasing growth in demand to process such a data as fast as possible, usually in real-time. Modern CPUs fall short of supplying this demand at industrial level due to a limited amount of parallel processing power.
We currently provide GPGPU programming services using the NVIDIA CUDA Toolkit, but we are open to OpenCL-based projects as well. Our programming services include:
Serial algorithms parallelization
Truth be told – not every algorithm can be parallelized. In many scenarios the input data depends on the data from previous computation results. This is the worst case scenario for the GPU computing model. Therefore, we provide consulting services where we explore all possible modifications of the serial algorithm to fit it into the concurrent execution model in a better way.
Big data-oriented applications.
We can boost your data collection and analysis considerably by offloading a lot of computation-intensive tasks to dedicated GPU instances. We also provide consulting on optimal hardware setup and production deployment of GPU-powered software on commercial GPU farms like Amazon’s Elastic Compute Cloud (EC2).
GPGPU graphics interop
The term “graphics interop” in GPGPU is used to denote a process whereby data is exchanged between GPGPU libraries as CUDA and graphic rendering API such as OpenGL or Direct3D.The independent and asynchronous execution of a GPGPU module allows for more efficient utilisation of GPU and helps the graphics library to process bigger amounts of data per frame. It is not uncommon to see applications with particle systems, water-simulation generated using a GPGPU backend and rendered by graphics API. Also, GPU-based video encoding libraries like NVENC are GPGPU libraries and can therefore be used in rendering applications via graphics interop only.