Boost.compute é uma biblioteca de computação GPU/paralela para C ++ com base no OpenCL.
A biblioteca principal é um embalagem fino de C ++ sobre a API OpenCL e fornece acesso a dispositivos, contextos, filas de comando e buffers de memória.
No topo da biblioteca central, há uma interface genérica e semelhante a STL, fornecendo algoritmos comuns (por exemplo, transform() , accumulate() , sort() ) junto com contêineres comuns (por exemplo, vector<T> , flat_set<T> ). Ele também possui várias extensões, incluindo algoritmos de computação paralela (por exemplo, exclusive_scan() , scatter() , reduce() ) e vários iteradores sofisticados (por exemplo, transform_iterator<> , permutation_iterator<> , zip_iterator<> ).
A documentação completa está disponível em http://boostorg.github.io/compute/.
O exemplo a seguir mostra como classificar um vetor de carros alegóricos na 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 é uma biblioteca somente para cabeçalho, portanto, nenhuma ligação é necessária. O exemplo acima pode ser compilado com:
g++ -I/path/to/compute/include sort.cpp -lOpenCL
Mais exemplos podem ser encontrados no tutorial e no diretório de exemplos.
Perguntas sobre a biblioteca (uso e desenvolvimento) podem ser publicadas na lista de discussão.
Bugs e solicitações de recursos podem ser relatados através do rastreador de problemas.
Também fique à vontade para me enviar um e -mail com problemas, perguntas ou feedback.
O projeto Boost.compute está atualmente procurando desenvolvedores adicionais com interesse em computação paralela.
Envie um e -mail para Kyle Lutz ([email protected]) para obter mais informações.