Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
IBufferCopier.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2023 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/* IBufferCopier.h (C) 2000-2023 */
9/* */
10/* Interface pour la copie de buffer. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13#ifndef ARCANE_IMPL_IBUFFERCOPIER_H
14#define ARCANE_IMPL_IBUFFERCOPIER_H
15/*---------------------------------------------------------------------------*/
16/*---------------------------------------------------------------------------*/
17
18#include "arcane/utils/MemoryView.h"
19
20#include "arcane/core/GroupIndexTable.h"
21
22/*---------------------------------------------------------------------------*/
23/*---------------------------------------------------------------------------*/
24
25namespace Arcane
26{
27
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
39{
40 public:
41
42 virtual ~IBufferCopier() = default;
43
44 public:
45
46 virtual void copyFromBufferAsync(Int32ConstArrayView indexes,
47 ConstMemoryView buffer,
49
50 virtual void copyToBufferAsync(Int32ConstArrayView indexes,
51 MutableMemoryView buffer,
52 ConstMemoryView var_value) = 0;
53
55 virtual void barrier() = 0;
56
57 public:
58
59 virtual void setRunQueue(RunQueue* queue) = 0;
60};
61
62/*---------------------------------------------------------------------------*/
63/*---------------------------------------------------------------------------*/
64
65/*---------------------------------------------------------------------------*/
66/*---------------------------------------------------------------------------*/
67
69: public IBufferCopier
70{
71 public:
72
73 void copyFromBufferAsync(Int32ConstArrayView indexes,
74 ConstMemoryView buffer,
76 {
77 buffer.copyToIndexes(var_value, indexes, m_queue);
78 }
79
80 void copyToBufferAsync(Int32ConstArrayView indexes,
81 MutableMemoryView buffer,
82 ConstMemoryView var_value) override
83 {
84 buffer.copyFromIndexes(var_value, indexes, m_queue);
85 }
86
87 void barrier() override;
88 void setRunQueue(RunQueue* queue) override { m_queue = queue; }
89
90 private:
91
92 RunQueue* m_queue = nullptr;
93};
94
95/*---------------------------------------------------------------------------*/
96/*---------------------------------------------------------------------------*/
97
99: public IBufferCopier
100{
101 public:
102
104 : m_table(table)
105 {}
106
107 void copyFromBufferAsync(Int32ConstArrayView indexes,
108 ConstMemoryView buffer,
110 {
112 _buildFinalIndexes(final_indexes, indexes);
113 m_base_copier.copyFromBufferAsync(final_indexes, buffer, var_value);
114 }
115
116 void copyToBufferAsync(Int32ConstArrayView indexes,
117 MutableMemoryView buffer,
118 ConstMemoryView var_value) override
119 {
121 _buildFinalIndexes(final_indexes, indexes);
122 m_base_copier.copyToBufferAsync(final_indexes, buffer, var_value);
123 }
124 void barrier() override { m_base_copier.barrier(); }
125
126 void setRunQueue(RunQueue* queue) override { m_base_copier.setRunQueue(queue); }
127
128 private:
129
130 GroupIndexTable* m_table;
131 DirectBufferCopier m_base_copier;
132
133 private:
134
135 void _buildFinalIndexes(Array<Int32>& final_indexes, ConstArrayView<Int32> orig_indexes)
136 {
137 // TODO: faire cette allocation qu'une seule fois et la conserver.
138 GroupIndexTable& table = *m_table;
139 Int32 n = orig_indexes.size();
140 final_indexes.resize(n);
141 for (Int32 i = 0; i < n; ++i)
142 final_indexes[i] = table[orig_indexes[i]];
143 }
144};
145
146/*---------------------------------------------------------------------------*/
147/*---------------------------------------------------------------------------*/
148
149} // End namespace Arcane
150
151/*---------------------------------------------------------------------------*/
152/*---------------------------------------------------------------------------*/
153
154#endif
File d'exécution pour un accélérateur.
void barrier() override
Bloque tant que les copies ne sont pas terminées.
Classe de base d'une table de hachage entre les items d'un groupe et leurs positions dans la table.
Interface pour copier des éléments entre deux zones avec indexation.
virtual void barrier()=0
Bloque tant que les copies ne sont pas terminées.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
void barrier() override
Bloque tant que les copies ne sont pas terminées.
Vue constante d'un tableau de type T.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-