intel / beignet

Beignet is an open source implementation of the OpenCL specification - a generic compute oriented API. Here is Beignet Source Code Mirror in github- This is a publish-only repository and all pull requests are ignored. Please follow https://wiki.freedesktop.org/www/Software/Beignet/ for any of your improvements
GNU Lesser General Public License v2.1
95 stars 40 forks source link

DISCONTINUATION OF PROJECT

This project will no longer be maintained by Intel.

Intel has ceased development and contributions including, but not limited to, maintenance, bug fixes, new releases, or updates, to this project.

Intel no longer accepts patches to this project.

If you have an ongoing need to use this project, are interested in independently developing it, or would like to maintain patches for the open source software community, please create your own fork of this project.

Contact: webadmin@linux.intel.com Beignet

Beignet is an open source implementation of the OpenCL specification - a generic compute oriented API. This code base contains the code to run OpenCL programs on Intel GPUs which basically defines and implements the OpenCL host functions required to initialize the device, create the command queues, the kernels and the programs and run them on the GPU. The code base also contains the compiler part of the stack which is included in backend/. For more specific information about the compiler, please refer to backend/README.md

News

[[Beignet project news|Beignet/NEWS]]

Prerequisite

The project depends on the following external libraries:

And if you want to work with the standard ICD libOpenCL.so, then you need two more packages (the following package name is for Ubuntu):

If you don't want to enable ICD, or your system doesn't have ICD OpenCL support, you must explicitly disable ICD support by running cmake with option -DOCLICD_COMPAT=0 then you can still link to the beignet OpenCL library. You can find the beignet/libcl.so in your system's library installation directories.

Note that the compiler depends on LLVM (Low-Level Virtual Machine project), and the project normally supports the 3 latest LLVM released versions. Right now, the code has been compiled with LLVM 3.6, 3.7 and 3.8. With older version LLVM from 3.3, build still support, but no full tests cover.

A simple command to install all the above dependencies for ubuntu or debian is:

sudo apt-get install cmake pkg-config python ocl-icd-dev libegl1-mesa-dev ocl-icd-opencl-dev libdrm-dev libxfixes-dev libxext-dev llvm-3.6-dev clang-3.6 libclang-3.6-dev libtinfo-dev libedit-dev zlib1g-dev

http://llvm.org/releases/

The recommended LLVM/CLANG version is 3.6 and/or 3.7

Based on our test result, LLVM 3.6 and 3.7 has the best pass rate on all the test suites. Compared to LLVM 3.6 and 3.7, if you used LLVM 3.8, you should pay attention to float immediate. For example, if you use 1.0 in the kernel, LLVM 3.6 will treat it as 1.0f, a single float, because the project doesn't support double float. but LLVM 3.8 will treat it as 1.0, a double float, at the last it may cause error. So we recommend using 1.0f instead of 1.0 if you don't need double float.

For LLVM 3.4 and 3.5, Beignet still support them, but it may be limited to support the build and major functions.

How to build and install

The project uses CMake with three profiles:

  1. Debug (-g)
  2. RelWithDebInfo (-g with optimizations)
  3. Release (only optimizations)

Basically, from the root directory of the project

> mkdir build

> cd build

> cmake ../ # to configure

Please be noted that the code was compiled on GCC 4.6, GCC 4.7 and GCC 4.8 and CLANG 3.5 and ICC 14.0.3. Since the code uses really recent C++11 features, you may expect problems with older compilers. The default compiler should be GCC, and if you want to choose compiler manually, you need to configure it as below:

> cmake -DCOMPILER=[GCC|CLANG|ICC] ../

CMake will check the dependencies and will complain if it does not find them.

> make

The cmake will build the backend firstly. Please refer to: [[OpenCL Gen Backend|Beignet/Backend]] to get more dependencies.

Once built, the run-time produces a shared object libcl.so which basically directly implements the OpenCL API.

> make utest

A set of tests are also produced. They may be found in utests/.

Simply invoke:

> make install

It installs the following six files to the beignet/ directory relatively to your library installation directory.

It installs the OCL icd vendor files to /etc/OpenCL/vendors, if the system support ICD.

> make package

It packages the driver binaries, you may copy&install the package to another machine with similar system.

How to run

After building and installing Beignet, you may need to check whether it works on your platform. Beignet also produces various tests to ensure the compiler and the run-time consistency. This small test framework uses a simple c++ registration system to register all the unit tests.

You need to call setenv.sh in the utests/ directory to set some environment variables firstly as below:

> . setenv.sh

Then in utests/:

> ./utest_run

will run all the unit tests one after the others

> ./utest_run some_unit_test

will only run some_unit_test test.

On all supported target platform, the pass rate should be 100%. If it is not, you may need to refer the "Known Issues" section. Please be noted, the . setenv.sh is only required to run unit test cases. For all other OpenCL applications, don't execute that command.

Normally, beignet needs to run under X server environment as normal user. If there isn't X server, beignet provides two alternative to run:

Supported Targets

OpenCL 2.0

From release v1.3.0, beignet supports OpenCL 2.0 on Skylake and later hardware. This requires LLVM/Clang 3.9 or later, libdrm 2.4.66 or later and x86_64 linux. As required by the OpenCL specification, kernels are compiled as OpenCL C 1.2 by default; to use 2.0 they must explicitly request it with the -cl-std=CL2.0 build option. As OpenCL 2.0 is likely to be slower than 1.2, we recommend that this is used only where needed. (This is because 2.0 uses more registers and has lots of int64 operations, and some of the 2.0 features (pipes and especially device queues) are implemented in software so do not provide any performance gain.) Beignet will continue to improve OpenCL 2.0 performance.

Known Issues

Project repository

Right now, we host our project on fdo at: http://cgit.freedesktop.org/beignet/.
And the Intel 01.org: https://01.org/beignet

The team

Beignet project was created by Ben Segovia. Since 2013, Now Intel China OTC graphics team continue to work on this project. The official contact for this project is:
Zou Nanhai (nanhai.zou@intel.com).

Maintainers from Intel:

Developers from Intel:

Debian Maintainer:

Fedora Maintainer:

If I missed any other package maintainers, please feel free to contact the mail list.

How to contribute

You are always welcome to contribute to this project, just need to subscribe to the beignet mail list and send patches to it for review. The official mail list is as below: http://lists.freedesktop.org/mailman/listinfo/beignet
The official bugzilla is at: https://bugs.freedesktop.org/enter_bug.cgi?product=Beignet
You are welcome to submit beignet bug. Please be noted, please specify the exact platform information, such as BYT/IVB/HSW/BDW, and GT1/GT2/GT3. You can easily get this information by running the beignet's unit test.

Documents for OpenCL application developers

The wiki URL is as below: http://www.freedesktop.org/wiki/Software/Beignet/