Added a opencl implementation. Still in testing