Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
RunQueuePool.h
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/* RunQueuePool.h (C) 2000-2024 */
9/* */
10/* Collection de RunQueue. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_ACCELERATOR_CORE_RUNQUEUE_POOL_H
13#define ARCANE_ACCELERATOR_CORE_RUNQUEUE_POOL_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/UniqueArray.h"
18
20#include "arcane/accelerator/core/Runner.h"
21#include "arcane/accelerator/core/RunQueue.h"
22
23/*---------------------------------------------------------------------------*/
24/*---------------------------------------------------------------------------*/
25
26namespace Arcane::Accelerator
27{
28
29/*---------------------------------------------------------------------------*/
30/*---------------------------------------------------------------------------*/
31/*!
32 * \brief Collection de RunQueue.
33 *
34 * Il faut appeler initialize() avant d'utiliser l'instance.
35 *
36 * L'opérateur d'accès aux éléments renvoit la
37 * (i % poolSize()) ème RunQueue de la collection.
38 */
39class ARCANE_ACCELERATOR_CORE_EXPORT RunQueuePool
40{
41 public:
42
43 //! Créé une instance vide
45
46 public:
47
48 RunQueuePool(const RunQueuePool&) = delete;
49 RunQueuePool(RunQueuePool&&) = delete;
50 RunQueuePool& operator=(const RunQueuePool&) = delete;
51 RunQueuePool& operator=(RunQueuePool&&) = delete;
52
53 public:
54
55 //! Initialise l'instance avec \a pool_size RunQueue
56 void initialize(Runner& runner, Int32 pool_size);
57 //! Initialise l'instance avec \a pool_size RunQueue
58 void initialize(Runner& runner, Int32 pool_size, const RunQueueBuildInfo& bi);
59
60 public:
61
62 //! Pour récupérer la i % poolSize() ième queue d'exécution
63 const RunQueue& operator[](Int32 i) const
64 {
65 return m_pool[i % m_pool_size];
66 }
67
68 //! Pour récupérer la i % poolSize() ième queue d'exécution
70 {
71 return m_pool[i % m_pool_size];
72 }
73
74 //! Force l'attente de toutes les RunQueue
75 void barrier() const;
76
77 //! Taille de la collection
78 Int32 size() const { return m_pool_size; }
79
80 //! Modifie l'état d'asynchronisme des files.
81 void setAsync(bool v) const;
82
83 private:
84
86 Runner m_runner;
87 Int32 m_pool_size = 0;
88};
89
90/*---------------------------------------------------------------------------*/
91/*---------------------------------------------------------------------------*/
92
93} // End namespace Arcane::Accelerator
94
95/*---------------------------------------------------------------------------*/
96/*---------------------------------------------------------------------------*/
97
98#endif
Informations pour créer une RunQueue.
Collection de RunQueue.
Int32 size() const
Taille de la collection.
RunQueue & operator[](Int32 i)
Pour récupérer la i % poolSize() ième queue d'exécution.
const RunQueue & operator[](Int32 i) const
Pour récupérer la i % poolSize() ième queue d'exécution.
File d'exécution pour un accélérateur.
Gestionnaire d'exécution pour accélérateur.
Definition core/Runner.h:53
Vecteur 1D de données avec sémantique par valeur (style STL).
Espace de nom pour l'utilisation des accélérateurs.