This is an early implementation of Node.JS bindings to OpenCL supporting all features of OpenCL up to the latests specification available on Khronos.org.
This implementation is different from node-webcl in the sense that it is close to OpenCL C host methods. A WebCL object model would be available later by simply wrapping the low level methods of node-opencl.
The test/ folder will contain as many unit tests testing all features of OpenCL. These tests are not based on Khronos conformance tests, though they should be similar. The goals of these tests is to check OpenCL drivers to discover their bugs on various platforms and, if possible, implement remedies while companies correct their drivers.
The implementation is compliant to OpenCL 1.1, 1.2 and 2.0 in terms of method support. Presence of these methods depend on the version of OpenCL supported by your driver.
Compliant to node.js 4.x architecture and NAN 2.x. Due to the extensive changes in v8, we don't support earlier versions of node.js.
This project has been succesfully tested on the following platforms :
We only support 64-bit operating systems, though 32-bit OS should work too.
Except specific platform installation guides below, you only need to install the package through
To run unit tests, you will need mocha as a global package. Then you can simply call
You should only need :
The easiest way to get the projet running with an Intel CPU or an AMD CPU/GPU/APU is by using AMD APP SDK.
You can use the included Dockerfile for an example with Ubuntu.
This dockerfile is based on the following guide : http://streamcomputing.eu/blog/2011-06-24/install-opencl-on-debianubuntu-orderly/
You need at least:
Please note that while node-gyp should work for compilation, it is possible that another DLL will be used on dynamic linking, leading to errors.
You need to update your path in order to to get AMD APP SDK's OpenCL.dll first in path resolution order.
For now you can simply require this project and call native-like functions on the global object returned.
The API is very close to the low-level one, although there are minor changes when it comes to lengths and, of course, pointers.
Depending on your OpenCL implementation, your OS and the OpenCL implementation you're using, you will get different behaviours that do not always correspond to the one given in Khronos specifications. For now we do not correct them, but we have put warnings when running tests that trigger those behaviours so you can run them to check if it is a known issue.
value = (hi << 32) | lo
By adding true instead of creating a cl.Event (as in webcl) to any enqueueXXX() methods, the enqueueXXX() returns a cl.Event that can be used to coordinate calls, profiling etc...
Pull requests are welcome! When you do a PR on this project, you need to respect the following rules :
This project is under a BSD 3-Clause licence.