Boost.Compute est une bibliothèque GPU / composition parallèle pour C ++ basée sur OpenCL.
La bibliothèque de base est un mince wrapper C ++ sur l'API OpenCL et donne accès aux périphériques de calcul, aux contextes, aux files d'attente de commandes et aux tampons de mémoire.
Au-dessus de la bibliothèque de base se trouve une interface générique de type STL fournissant des algorithmes communs (par exemple transform() , accumulate() , sort() ) ainsi que des conteneurs communs (par exemple vector<T> , flat_set<T> ). Il dispose également d'un certain nombre d'extensions, notamment des algorithmes de composition en parallèle (par exemple exclusive_scan() , scatter() , reduce() ) et un certain nombre d'itérateurs de fantaisie (par exemple transform_iterator<> , permutation_iterator<> , zip_iterator<> ).
La documentation complète est disponible sur http://boostorg.github.io/compute/.
L'exemple suivant montre comment trier un vecteur de flotteurs sur le 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 est une bibliothèque d'en-tête uniquement, donc aucun lien n'est requis. L'exemple ci-dessus peut être compilé avec:
g++ -I/path/to/compute/include sort.cpp -lOpenCL
Plus d'exemples peuvent être trouvés dans le tutoriel et dans le répertoire des exemples.
Des questions sur la bibliothèque (utilisation et développement) peuvent être publiées sur la liste de diffusion.
Les bogues et les demandes de fonctionnalités peuvent être signalés via le suivi du problème.
N'hésitez pas à m'envoyer un e-mail avec des problèmes, des questions ou des commentaires.
Le projet Boost.Compute est actuellement à la recherche de développeurs supplémentaires intéressés par l'informatique parallèle.
Veuillez envoyer un e-mail à Kyle Lutz ([email protected]) pour plus d'informations.