BOOST.COMPUTE es una biblioteca GPU/paralela para C ++ basada en OpenCL.
La biblioteca Core es un contenedor C ++ delgado sobre la API OpenCL y proporciona acceso a dispositivos de cómputo, contextos, colas de comandos y buffers de memoria.
Además de la biblioteca central hay una interfaz genérica, similar a STL, que proporciona algoritmos comunes (por ejemplo, transform() , accumulate() , sort() ) junto con contenedores comunes (por ejemplo, vector<T> , flat_set<T> ). También presenta una serie de extensiones que incluyen algoritmos que computaron paralelo (por ejemplo, exclusive_scan() , scatter() , reduce() ) y varios iteradores elegantes (por ejemplo, transform_iterator<> , permutation_iterator<> , zip_iterator<> ).
La documentación completa está disponible en http://boostorg.github.io/compute/.
El siguiente ejemplo muestra cómo ordenar un vector de flotadores en la GPU:
# include < vector >
# include < algorithm >
# include < boost/compute.hpp >
namespace compute = boost::compute;
int main ()
{
// get the default compute device
compute::device gpu = compute::system::default_device ();
// create a compute context and command queue
compute::context ctx (gpu);
compute::command_queue queue (ctx, gpu);
// generate random numbers on the host
std::vector< float > host_vector ( 1000000 );
std::generate (host_vector. begin (), host_vector. end (), rand );
// create vector on the device
compute::vector< float > device_vector ( 1000000 , ctx);
// copy data to the device
compute::copy (
host_vector. begin (), host_vector. end (), device_vector. begin (), queue
);
// sort data on the device
compute::sort (
device_vector. begin (), device_vector. end (), queue
);
// copy data back to the host
compute::copy (
device_vector. begin (), device_vector. end (), host_vector. begin (), queue
);
return 0 ;
}BOOST.COMPUTE es una biblioteca solo de encabezado, por lo que no se requiere enlace. El ejemplo anterior se puede compilar con:
g++ -I/path/to/compute/include sort.cpp -lOpenCL
Se pueden encontrar más ejemplos en el tutorial y en el directorio de ejemplos.
Las preguntas sobre la biblioteca (tanto uso como de desarrollo) se pueden publicar en la lista de correo.
Los errores y las solicitudes de funciones se pueden informar a través del rastreador de problemas.
También no dude en enviarme un correo electrónico con cualquier problema, pregunta o comentarios.
El proyecto Boost.Compute está buscando desarrolladores adicionales con interés en la computación paralela.
Envíe un correo electrónico a Kyle Lutz ([email protected]) para obtener más información.