Diferencias entre VexCL, Thrust y Boost.Compute

Con solo una comprensión superficial de estas bibliotecas, parecen ser muy similares. Sé que VexCL y Boost.Compute usan OpenCl como backend (aunque la versión v1.0 VexCL también admite CUDA como backend) y Thrust usa CUDA. Aparte de los diferentes backends, ¿cuál es la diferencia entre estos.

Específicamente, qué espacio del problema abordan y por qué querría usar uno sobre el otro.

Además, en las Preguntas Frecuentes de Thrust se afirma que

La principal barrera para el soporte de OpenCL es la falta de un compilador y tiempo de ejecución de OpenCL con soporte para plantillas de C ++.

Si este es el caso, ¿cómo es posible que incluso existan VexCL y Boost.Compute?

Respuestas a la pregunta(1)

Su respuesta a la pregunta