Raja est une bibliothèque d'abstractions de logiciels C ++, principalement développée au Lawrence Livermore National Laboratory (LLNL), qui permet la portabilité des modèles d'architecture et de programmation pour les applications HPC. Raja a deux objectifs principaux:
Raja offre une exécution de boucle parallèle portable en fournissant des blocs de construction qui étendent le parallèle généralement accepté pour l'idiome. Raja s'appuie sur des fonctionnalités standard C ++ 14.
La conception de Raja est enracinée dans des décennies d'expérience en travaillant sur des applications multiphysiques basées sur un maillage de production. Sur la base de la diversité des algorithmes et des styles d'ingénierie logicielle utilisés dans de telles applications, Raja est conçu pour permettre aux développeurs d'applications d'adapter les concepts Raja et de les spécialiser pour différents modèles d'implémentation de code et l'utilisation du C ++.
Raja partage les objectifs et les concepts trouvés dans d'autres approches d'abstraction de la portabilité C ++, telles que Kokkos et Thrust. Cependant, il comprend des concepts et des capacités absents dans d'autres modèles qui sont fondamentaux pour les applications avec lesquelles nous travaillons.
Il est important de noter que, bien que Raja soit utilisé dans une diversité d'applications de production, il s'agit vraiment d'un travail en cours. La communauté des chercheurs et des développeurs d'applications de LLNL qui y contribuent activement se développe. Les versions disponibles en tant que versions GitHub contiennent principalement des fonctionnalités bien utilisées et bien testées. Nos interfaces principales sont assez stables tandis que les implémentations sous-jacentes sont affinées. Des fonctionnalités supplémentaires apparaîtront dans les versions futures.
Le code Raja vit dans un référentiel GitHub. Pour cloner le repo, utilisez la commande:
git clone --recursive https://github.com/llnl/raja.git
Ensuite, vous pouvez construire Raja comme tout autre projet CMake, à condition que vous ayez un compilateur C ++ qui prend en charge la norme C ++ 14. Le moyen le plus simple de créer le code, en utilisant le compilateur par défaut de votre système, consiste à exécuter la séquence de commandes suivante dans le répertoire RAJA de niveau supérieur (les versions à source ne sont pas autorisées!):
mkdir build
cd build
cmake ../
make
Plus de détails sur les options de configuration RAJA se trouvent dans le Guide de l'utilisateur Raja (lié ci-dessous).
Nous maintenons également un projet de modèle Raja qui montre comment utiliser Raja dans un projet CMake, soit en tant que sous-module GIT, soit comme bibliothèque installée.
Le Guide de l'utilisateur Raja est le meilleur endroit pour commencer à apprendre Raja et comment l'utiliser.
La version la plus récente du Guide de l'utilisateur (Raja Develop Branch): https://raja.readthedocs.io
Pour accéder aux documents pour d'autres versions publiées par Raja: https://readthedocs.org/projects/raja/
Nous maintenons un référentiel pour le matériel de didacticiel Raja Portaility Suite: https://github.com/llnl/raja-suite-tutorial
Pour citer Raja, veuillez utiliser les références suivantes:
Couche de portabilité des performances RAJA. https://github.com/llnl/raja
Da Beckingsale, J. Binrse, R. Hornung, H. Jones, W. Killian, AJ Kunen, O. Pearce, P. Robinson, BS Ryujin, Trw Scogland, "Raja: Performance portable pour les applications scientifiques à grande échelle", 2019 Atelier international IEEE / ACM sur les performances, la portabilité et la productivité dans HPC (P3HPC). Télécharger ici
La suite de performances Raja contient une collection de grains de boucle implémentés dans plusieurs variantes Raja et non-Raja. Nous l'utilisons pour surveiller et évaluer les performances de Raja sur différentes plates-formes à l'aide d'une variété de compilateurs. De nombreux grands fournisseurs de compilateurs utilisent la suite pour améliorer leur soutien aux abstractions comme Raja. La suite de performance Raja est une excellente source d'exemples d'utilisation de Raja où vous pouvez comparer les variantes Raja et non-Raja d'une variété de noyaux différents et de back-end Raja.
Le référentiel proxy Raja contient des versions RAJA de plusieurs applications proxy HPC importantes.
Chai fournit une abstraction gérée de tableau qui fonctionne avec Raja pour copier automatiquement les données utilisées dans les noyaux Raja dans l'espace approprié pour l'exécution. Il a été développé en complément à Raja.
Le moyen le plus efficace de communiquer avec l'équipe de développement de Raja Core est via notre liste de diffusion: [email protected]
Vous êtes également invités à rejoindre notre groupe Raja Google.
Si vous avez des questions, trouvez un bug ou avez des idées sur l'élargissement de la fonctionnalité ou de l'applicabilité de Raja et souhaitez contribuer à son développement, n'hésitez pas à nous contacter. Nous sommes très intéressés à améliorer Raja et à explorer de nouvelles façons de l'utiliser.
L'équipe Raja suit le modèle de développement de Gitflow. Les gens souhaitant contribuer à Raja devraient inclure leur travail dans une branche de fonctionnalité créée à partir de la branche Raja develop
. Cette branche contient les derniers travaux à Raja. Ensuite, créez une demande de traction avec la branche develop
comme destination. Périodiquement, nous fusions la branche de développement dans la branche main
et étiquetons une nouvelle version.
Veuillez consulter la page des contributeurs Raja, pour voir la liste complète des contributeurs au projet.
Raja est autorisé en vertu de la licence BSD 3 clause.
Les droits d'auteur et les brevets dans le projet Raja sont conservés par des contributeurs. Aucune affectation de droit d'auteur n'est requise pour contribuer à Raja.
Open source illimitée - Distribution BSD 3-CLAUSE LLNL-CODE-689114
OCEC-16-063
Pour les détails de la publication et les restrictions, veuillez consulter les informations dans les éléments suivants:
Les fichiers individuels contiennent des balises SPDX au lieu du texte complet de licence. Cela permet le traitement machine des informations de licence basées sur les identificateurs de licence SPDX disponibles ici: https://spdx.org/licenses/
Les fichiers licenciés sous forme de bsd 3 clause contiennent le texte suivant dans l'en-tête de licence:
SPDX-License-Identifier: (BSD-3-Clause)
Raja regroupe ses dépendances externes sous forme de sous-modules dans le référentiel GIT. Ces forfaits sont couverts par diverses licences permissives. Une liste de résumé suit. Voir la licence incluse avec chaque package pour plus de détails.
PackageName: BLT
PackageHomePage: https://github.com/llnl/blt
PackageLicensEDEClared: BSD-3-CLAUSE
Packagename: camp
PackageHomePage: https://github.com/llnl/camp
PackageLicensEDEClared: BSD-3-CLAUSE
Packagename: Cub
PackageHomePage: https://github.com/nvlabs/cub
PackageLicensEDEClared: BSD-3-Clause
PackageName: rocprim
PackageHomePage: https://github.com/rocmsoftwareplatform/rocprim.git
PackageLicensEdeclared: Licence MIT