Arcane  v4.1.0.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
RunCommandLaunch.h
Aller à la documentation de ce fichier.
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2024 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* RunCommandLaunch.h (C) 2000-2025 */
9/* */
10/* RunCommand pour le parallélisme hiérarchique. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_ACCELERATOR_RUNCOMMANDLAUNCH_H
13#define ARCANE_ACCELERATOR_RUNCOMMANDLAUNCH_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/accelerator/RunCommandLaunchImpl.h"
18
19/*---------------------------------------------------------------------------*/
20/*---------------------------------------------------------------------------*/
21
22namespace Arcane::Accelerator
23{
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
33extern "C++" ARCANE_ACCELERATOR_EXPORT WorkGroupLoopRange
34makeWorkGroupLoopRange(RunCommand& command, Int32 nb_group, Int32 group_size);
35
36/*---------------------------------------------------------------------------*/
37/*---------------------------------------------------------------------------*/
45extern "C++" ARCANE_ACCELERATOR_EXPORT WorkGroupLoopRange
46makeWorkGroupLoopRange(RunCommand& command, Int32 nb_element, Int32 nb_group, Int32 group_size);
47
48/*---------------------------------------------------------------------------*/
49/*---------------------------------------------------------------------------*/
50
51} // namespace Arcane::Accelerator
52
53/*---------------------------------------------------------------------------*/
54/*---------------------------------------------------------------------------*/
55
56// Pour Sycl, le type de l'itérateur ne peut pas être le même sur l'hôte et
57// le device car il faut un 'sycl::nd_item' et il n'est pas possible d'en
58// construire un (pas de constructeur par défaut). On utilise donc
59// une lambda template et le type de l'itérateur est un paramètre template
60
72#if defined(ARCANE_COMPILING_SYCL)
73#define RUNCOMMAND_LAUNCH(iter_name, bounds, ...) \
74 A_FUNCINFO << ::Arcane::Accelerator::impl::makeExtendedLoop(bounds __VA_OPT__(, __VA_ARGS__)) \
75 << [=] ARCCORE_HOST_DEVICE(auto iter_name __VA_OPT__(ARCANE_RUNCOMMAND_REDUCER_FOR_EACH(__VA_ARGS__)))
76#else
77#define RUNCOMMAND_LAUNCH(iter_name, bounds, ...) \
78 A_FUNCINFO << ::Arcane::Accelerator::impl::makeExtendedLoop(bounds __VA_OPT__(, __VA_ARGS__)) \
79 << [=] ARCCORE_HOST_DEVICE(typename decltype(bounds)::LoopIndexType iter_name __VA_OPT__(ARCANE_RUNCOMMAND_REDUCER_FOR_EACH(__VA_ARGS__)))
80#endif
81
82/*---------------------------------------------------------------------------*/
83/*---------------------------------------------------------------------------*/
84
85#endif
86
87/*---------------------------------------------------------------------------*/
88/*---------------------------------------------------------------------------*/
Gestion d'une commande sur accélérateur.
Intervalle d'itération d'une boucle utilisant le parallélisme hiérarchique.
Espace de nom pour l'utilisation des accélérateurs.
WorkGroupLoopRange makeWorkGroupLoopRange(RunCommand &command, Int32 nb_group, Int32 group_size)
Créé un intervalle d'itération pour la commande command.
std::int32_t Int32
Type entier signé sur 32 bits.