Diferenças entre VexCL, Thrust e Boost.Compute

Com uma compreensão superficial dessas bibliotecas, elas parecem muito semelhantes. Eu sei que o VexCL e o Boost.Compute usam o OpenCl como um backend (embora o VexCL versão v1.0 também suporte o CUDA como backend) e o Thrust usa o CUDA. Além dos diferentes backends, qual é a diferença entre estes.

Especificamente, que espaço de problema eles abordam e por que eu gostaria de usar um sobre o outro?

Além disso, no FAQ Thrust, afirma-se que

A principal barreira para o suporte OpenCL é a falta de um compilador e tempo de execução OpenCL com suporte para modelos C ++

Se este for o caso, como é possível que VexCL e Boost.Compute existam mesmo.

questionAnswers(1)

yourAnswerToTheQuestion