-
Notifications
You must be signed in to change notification settings - Fork 62
Developer Information
Oclgrind consists of three distinct components. The core is the SPIR interpreter/OpenCL device simulator, which can be used either via an OpenCL runtime API implementation or using a standalone kernel interface.
TODO: More implementation details
This component lives in src/core
, and produces the library oclgrind
. Classes within this component are encapsulated in the oclgrind
namespace. The header files defining the core classes will be installed to INSTALL_PATH/include/oclgrind/
.
The runtime lives in src/runtime
, and produces the libraries oclgrind-rt
and oclgrind-rt-icd
. These libraries are almost identical; the only difference is that the -icd
version adds underscores to the API functions to avoid clashing with the ICD loader. On Unix systems, an oclgrind
script is also generated that uses LD_PRELOAD/DYLD_INSERT_LIBRARIES
to force an application to run with Oclgrind (rather than the ICD or an alternative implementation).
This component lives in src/kernel
, and produces the binary oclgrind-kernel
.
There are two build systems used in Oclgrind: autotools and CMake.
Oclgrind is configured to build against LLVM 3.6 or newer, and employs nightly testing to ensure that it is kept up to date with LLVM trunk.
During installation, Clang is used to generate a precompiled header for clc.h
. This greatly improves compilation times when providing OpenCL C source code to Oclgrind.
TODO: Details about adding new tests
There are three categories of tests:
- tests/kernels - tests for kernel language functionality (using
oclgrind-kernel
) - tests/runtime - tests for the OpenCL runtime API
- tests/apps - full applications that test general functionality
The tests can be with the commands make check
(autotools) or make test
(CMake). With Visual Studio a RUN_TESTS
project will be generated that will run the tests.