CUDA.NET is a library that provides access to GPU computing resources on top (using) CUDA API by NVIDIA.
This article is divided into the following topics:
- What is a GPU?
- Overview of CUDA
- Introduction to CUDA.NET
- Typical Applications
- Supported Platforms
What is a GPU?
GPU stands for Graphics Processing Unit.
It is a special, dedicated hardware usually used for graphics (2D, 3D, gaming) but now also employed to computing purposes as well.
GPU is used as a general term to represent a hardware solution and there are various vendors worldwide manufacturing them – although there are many types of GPUs only specific models or generations can be used for computing or with CUDA.
There are benefits for using the GPU as a computing resource – It provides strong computing power compared to other equivalents such as CPU, DSP or other dedicated chips with somewhat ease of programming.
For example, a reasonable GPU with 128 cores can provide about 500 GFLOPS (500 billion floating point operations per second), whereas a 4 core CPU can provide about 90 GFLOPS. The numbers can vary based on multiple parameters, but by means of raw computing power, these numbers provide a rough estimate for the potential in using the GPU.
Overview of CUDA
CUDA stands for Compute Unified Device Architecture and is a software environment created by NVIDIA to provide developers with specific API to utilize the GPU for computing directly, rather than doing graphics (the main purpose of GPUs).
This software environment provides API to enumerate the GPUs available in a system as computational devices, initialize them, allocate memory for each and execute code, actually full management aspects of these computing resources accessible on a computer.
CUDA itself is built with C, provides defined API and further libraries to assist developers, such as FFT and BLAS to perform Fourier transforms or linear algebra calculation, accelerated, on the GPU.
For further, deeper reading of these topics (GPU / CUDA), please follow this link: CUDA.
Introduction to CUDA.NET
As outlined above, the environments available today to GPU developers are mostly based on C and meant for native applications. However there is a need to have the same capabilities from managed (.NET/Java) applications. This is where CUDA.NET enters.
CUDA.NET is mostly an interfacing library, providing the same set of API as CUDA for low-level access, using the same terms and concepts. It is also a pure .NET implementation so one can use it from any .NET language or platform that supports CUDA and .NET (Linux, MacOSX etc.).
In addition to a low-level interface, CUDA.NET provides an object-oriented abstraction over CUDA, using the same objects and terms, but with simplifed access for .NET based applications. The same objects can be shared between both environments, but developers would find the OO interface much more friendly and intuitive for use.
The same set of libraries covered by CUDA is also accessible from CUDA.NET – FFT, BLAS and upcoming support for new libraries.
The GPU can be beneficial for applications where computing takes a significant amount of time or is a bottleneck, as well when looking to free other resources and offload computations to the GPU (as it doesn’t affect the system while working in the background).
Fields where a sort of accelerated computing is needs, or processing of multiple elements can benefit the GPU.
To name a few:
- Image/Video processing (filters, encoding, decoding)
- Signal processing
- Oil & gas (Geophysics)
- Medical imaging
- Scientific computations, simulations and research
As mentioned earlier, CUDA.NET is based on a pure .NET implementation.
It can be used on (assuming the OS supports CUDA):
- For desktops/embedded: XP and above
- For servers: 2003 and above
- Linux and other UNIX variants
- Macintosh (MacOSX)
The library is fully compatible with 32 and 64 bit systems of all kinds mentioned above.