title: Differences between VexCL, Thrust, and Boost.Compute
body: <p>With a just a cursory understanding of these libraries, they look to be very similar. I know that VexCL and Boost.Compute use OpenCl as a backend (although the v1.0 release VexCL also supports CUDA as a backend) and Thrust uses CUDA. Aside from the different backends, what's the difference between these. </p>
  
  <p>Specifically, what problem space do they address and why would I want to use one over the other.</p>
  
  <p>Also, on the Thrust FAQ it is stated that</p>
  
  <blockquote>
    <p>The primary barrier to OpenCL support is the lack of an OpenCL compiler and runtime with support for C++ templates</p>
  </blockquote>
  
  <p>If this is the case, how is it possible that VexCL and Boost.Compute even exist.</p>