|
There are 3 Low-level APIs for Nvidia GPGPU Computing
- CUDA Runtime API
- CUDA Driver API
- OpenCL
OpenCL offers a general API that is supported by many vendors and
allows the potential to run kernels efficiently on the CPU in addition
to coprocessor devices. CUDA Driver is a more mature GPGPU programming
API with stable compilers, freedom in the choice of host compilers, and
can potentially generate the most efficient code for Nvidia devices.
CUDA Runtime offers a more succinct API and support for GPU code
integrated with host code.
Unfortunately, all 3 APIs have different function names and data types.
Memory management is complicated:
- Host, Host Pinned, Host Pinned Write-Combined, Host
Portable, Device, Device 2D with Padding, Constant Device, Texture 2D,
Texture 3D, etc.
- CUDA-RT has 20 memory copy functions requiring up to
8 parameters
- CUDA-Driver has 17 memory copy functions
- OpenCL has 8 memory copy functions requiring up to 11
parameters
Geryon
Geryon is intended to be a simple library for managing
all three APIs with a consistent interface
- Change from one API to another by simply changing the
namespace
- Use multiple APIs in the same code
- Lightweight (only include files – no build required)
- Manage device query and selection
- Simple vector and matrix containers
- Simple routines for data copy and type casting
- Simple routines for data I/O
- Simple classes for managing device timing
- Simple classes for managing kernel compilation and
execution
Top of page
|