Awesome Open Source
Awesome Open Source

Coriander

Build applications written in NVIDIA® CUDA™ code for OpenCL™ 1.2 devices.

Concept

  • leave applications in NVIDIA® CUDA™
  • compile into OpenCL 1.2
  • run on any OpenCL 1.2 GPU

How to use

  • Write an NVIDIA® CUDA™ sourcecode file, or find an existing one
  • Let's use cuda_sample.cu
  • Compile, using cocl:
$ cocl_py cuda_sample.cu
   ...
   ... (bunch of compily stuff) ...
   ...

    ./cuda_sample.cu compiled into ./cuda_sample

Run:

$ ./cuda_sample
Using Intel , OpenCL platform: Intel Gen OCL Driver
Using OpenCL device: Intel(R) HD Graphics 5500 BroadWell U-Processor GT2
hostFloats[2] 123
hostFloats[2] 222
hostFloats[2] 444

Options

What Coriander provides

  • compiler for host-side code, including memory allocation, copy, streams, kernel launches
  • compiler for device-side code, handling templated C++ code, converting it into bog-standard OpenCL 1.2 code
  • cuBLAS API implementations for GEMM, GEMV, SCAL, SAXPY (using Cedric Nugteren's CLBlast)
  • cuDNN API implementations for: convolutions (using im2col algorithm over Cedric Nugteren's CLBlast, pooling, ReLU, tanh, and sigmoid

How Coriander works

Kernel compilation proceeds in two steps:

Slides on the IWOCL website, here

Installation

Coriander development is carried out using the following platforms:

  • Ubuntu 16.04, with:
    • NVIDIA K80 GPU and/or NVIDIA K520 GPU (via aws)
  • Mac Book Pro 4th generation (thank you ASAPP :-) ), with:
    • Intel HD Graphics 530
    • Radeon Pro 450
    • Sierra OS

Other systems should work too, ideally. You will need at a minimum at least one OpenCL-enabled GPU, and appropriate OpenCL drivers installed, for the GPU. Both linux and Mac systems stand a reasonable chance of working ok.

For installation, please see installation

Plugins

You can install the following plugins:

  • Coriander-clblast: just do cocl_plugins.py install --repo-url https://github.com/hughperkins/coriander-clblast
  • Coriander-dnn: just do cocl_plugins.py install --repo-url https://github.com/hughperkins/coriander-dnn
  • Your plugin here?

How to create a plugin

Add to your own cmake project

  • use cocl_add_executable and cocl_add_library
  • see cmake usage

Testing

See testing

Assumptions/relaxations made by Coriander

See assumptions

Roadmap

Libraries

Coriander uses the following libraries:

  • clang/llvm: c/c++ parser/compiler; many contributors
  • thrust: parallel GPU library, from NVIDIA®
  • yaml-cpp: yaml for c++, by Jesse Beder
  • EasyCL: wrapper for OpenCL 1.2 boilerplate
  • argparsecpp: command-line parser for c++
  • gtest: unit tests for c++, from Google

Related projects

How to Cite

Please cite: CUDA-on-CL: a compiler and runtime for running NVIDIA® CUDA™ C++11 applications on OpenCL™ 1.2 Devices

License

Apache 2.0

News

  • June 23:
    • factorized CLBlast implementation of NVIDIA® CUDA™ cuBLAS API, into new plugin coriander-clblast
  • June 21:
    • created a new release v6.0.0, that marks a bunch of changes:
      • incorporates of course the earlier changes:
        • took some big steps towards portability and Windows compilation, ie using python 2.7 scripts, rather than bash scripts, and fixing many Windows-related compilation issues
        • the plugin architecture
        • factorizing the partial NVIDIA® CUDA™ cuDNN API implementation into a new plugin coriander-dnn
      • moved the default installation directory from /usr/local to ~/coriander
        • this means that plugins can be installed without sudo
        • it also makes it relatively easy to wipe and reinstall, for more effective jenkins testing
      • install_distro.py is now considerably more tested than a few days ago, and handles downloading llvm-4.0 automatically
  • Older news

Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
gpu (379
ubuntu (362
mac (282
llvm (203
nvidia (121
opencl (119
intel (68
amd (51