ejecuta en varios dispositivos requiere programación dinámica para el bien del effeciency porque nunca se sabe el rendimiento exacto de cualquier dispositivo - es depende de la carga actual (no solo por su programa sino también por todos los demás), reloj actual (puede cambiar significativamente en la mayoría de las CPU y GPU según el perfil o carga de ahorro de energía actual). Además, el rendimiento en el mundo real puede depender de sus datos de entrada.
Por supuesto, usted puede escribir todos los códigos necesarios usted mismo como todas las demás respuestas sugieren, pero en mi opinión es una pérdida de tiempo y es una idea mucho mejor utilizar la solución existente. Recomiendo usar StarPU. He usado StarPU en mi proyecto OpenCL y funcionó bastante bien. StarPU viene con ejemplos de cómo escribir código capaz de utilizar múltiples GPU y CPU de manera eficiente.
StarPU:
procesadores tradicionales han llegado a límites arquitectónicos que los diseños de varios núcleos heterogéneos y la especialización de hardware (por ejemplo, coprocesadores, aceleradores, ...) tienen la intención de tratar. Sin embargo, la explotación de tales máquinas presenta numerosos problemas desafiantes en todos los niveles, que van desde modelos de programación y compiladores hasta el diseño de soluciones de hardware escalables. El diseño de sistemas de tiempo de ejecución eficientes para estas arquitecturas es un problema crítico. StarPU normalmente hace que sea mucho más fácil para bibliotecas de alto rendimiento o entornos de compilación explotar máquinas heterogéneas multinúcleo posiblemente equipadas con GPGPU o procesadores de celda: en lugar de manejar problemas de bajo nivel, los programadores pueden concentrarse en problemas algorítmicos.
También hay otro proyecto, SkePU, pero no lo probé yo mismo:
SkePU:
SkePU es un marco de programación tales esqueleto para sistemas de CPU multinúcleo y multi-GPU. Es una biblioteca de plantillas C++ con seis esqueletos paralelos a datos y uno paralelo a tareas, dos tipos de contenedores y soporte para ejecución en sistemas multi-GPU con CUDA y OpenCL.Recientemente, SkePU ha desarrollado un soporte para la ejecución híbrida, la programación dinámica y el balanceo de carga basados en el rendimiento implementando un back-end para el sistema de tiempo de ejecución StarPU.
Si busca en Google "programación dinámica gpu cpu opencl", puede encontrar aún más proyectos y documentación comercial o gratuita útiles.
Mi artículo [Una encuesta de las técnicas de computación heterogénea de la CPU-GPU] (https://goo.gl/hBK9nw) analiza muchos sistemas de tiempo de ejecución y lenguajes de programación para el uso de la CPU y la GPU. – user984260