Skip to content

Commit 1824fd9

Browse files
Merge pull request #1739 from arcaneframework/dev/gg-remove-usage-of-matvarindex-in-componentitemlistbuilder
Remove usage of 'MatVarIndex' in 'ComponentItemListBuilder'
2 parents 67e8aae + 5134039 commit 1824fd9

File tree

4 files changed

+36
-37
lines changed

4 files changed

+36
-37
lines changed

arcane/src/arcane/materials/IncrementalComponentModifier_Accelerator.cc

+8-10
Original file line numberDiff line numberDiff line change
@@ -261,15 +261,13 @@ _addItemsToIndexer(MeshMaterialVariableIndexer* var_indexer,
261261
const Int32 n = local_ids.size();
262262
list_builder.preAllocate(n);
263263

264-
SmallSpan<MatVarIndex> pure_matvar_indexes = list_builder.pureMatVarIndexes();
265-
SmallSpan<MatVarIndex> partial_matvar_indexes = list_builder.partialMatVarIndexes();
264+
SmallSpan<Int32> pure_indexes = list_builder.pureIndexes();
265+
SmallSpan<Int32> partial_indexes = list_builder.partialIndexes();
266266
SmallSpan<Int32> partial_local_ids = list_builder.partialLocalIds();
267267
Int32 nb_pure_added = 0;
268268
Int32 nb_partial_added = 0;
269269
Int32 index_in_partial = var_indexer->maxIndexInMultipleArray();
270270

271-
const Int32 component_index = var_indexer->index() + 1;
272-
273271
SmallSpan<const bool> cells_is_partial = m_work_info.m_cells_is_partial;
274272

275273
Accelerator::GenericFilterer filterer(m_queue);
@@ -286,7 +284,7 @@ _addItemsToIndexer(MeshMaterialVariableIndexer* var_indexer,
286284
};
287285
auto setter_lambda = [=] ARCCORE_HOST_DEVICE(Int32 input_index, Int32 output_index) {
288286
Int32 local_id = local_ids[input_index];
289-
pure_matvar_indexes[output_index] = MatVarIndex(0, local_id);
287+
pure_indexes[output_index] = local_id;
290288
};
291289
filterer.applyWithIndex(n, select_lambda, setter_lambda, A_FUNCINFO);
292290
nb_pure_added = filterer.nbOutputElement();
@@ -298,7 +296,7 @@ _addItemsToIndexer(MeshMaterialVariableIndexer* var_indexer,
298296
};
299297
auto setter_lambda = [=] ARCCORE_HOST_DEVICE(Int32 input_index, Int32 output_index) {
300298
Int32 local_id = local_ids[input_index];
301-
partial_matvar_indexes[output_index] = MatVarIndex(component_index, index_in_partial + output_index);
299+
partial_indexes[output_index] = index_in_partial + output_index;
302300
partial_local_ids[output_index] = local_id;
303301
};
304302
filterer.applyWithIndex(n, select_lambda, setter_lambda, A_FUNCINFO);
@@ -309,10 +307,10 @@ _addItemsToIndexer(MeshMaterialVariableIndexer* var_indexer,
309307

310308
if (traceMng()->verbosityLevel() >= 5)
311309
info() << "ADD_MATITEM_TO_INDEXER component=" << var_indexer->name()
312-
<< " nb_pure=" << list_builder.pureMatVarIndexes().size()
313-
<< " nb_partial=" << list_builder.partialMatVarIndexes().size()
314-
<< "\n pure=(" << list_builder.pureMatVarIndexes() << ")"
315-
<< "\n partial=(" << list_builder.partialMatVarIndexes() << ")";
310+
<< " nb_pure=" << list_builder.pureIndexes().size()
311+
<< " nb_partial=" << list_builder.partialIndexes().size()
312+
<< "\n pure=(" << list_builder.pureIndexes() << ")"
313+
<< "\n partial=(" << list_builder.partialIndexes() << ")";
316314

317315
// TODO: lors de cet appel, on connait le max de \a index_in_partial donc
318316
// on peut éviter de faire une réduction pour le recalculer.

arcane/src/arcane/materials/ItemMaterialVariableBaseT.H

+7-9
Original file line numberDiff line numberDiff line change
@@ -473,30 +473,28 @@ _initializeNewItems(const ComponentItemListBuilder& list_builder, RunQueue& queu
473473

474474
bool init_with_zero = m_p->materialMng()->isDataInitialisationWithZero();
475475

476-
SmallSpan<const MatVarIndex> partial_matvar = list_builder.partialMatVarIndexes();
476+
SmallSpan<const Int32> partial_indexes = list_builder.partialIndexes();
477477

478-
Integer nb_partial = partial_matvar.size();
478+
Integer nb_partial = partial_indexes.size();
479479

480480
// TODO: regarder s'il faut initialiser les mailles pure avec zéro.
481481
// En effet, normalement il n'y a pas de maille pure si on ajoute un matériau
482482
// (sauf lors de l'init).
483483
DataType zero = DataType();
484484

485485
auto command = makeCommand(queue);
486-
SmallSpan<ContainerViewType> views = m_device_views.smallSpan();
487486

488487
ContainerSpanType partial_view = m_host_views[var_index + 1];
489488
ContainerSpanType pure_view = m_host_views[0];
490489

491-
ARCANE_CHECK_ACCESSIBLE_POINTER(queue, views.data());
492-
ARCANE_CHECK_ACCESSIBLE_POINTER(queue, partial_matvar.data());
490+
ARCANE_CHECK_ACCESSIBLE_POINTER(queue, partial_indexes.data());
493491

494492
if (init_with_zero) {
495493
command << RUNCOMMAND_LOOP1(iter, nb_partial)
496494
{
497495
auto [i] = iter();
498-
MatVarIndex mvi = partial_matvar[i];
499-
Traits::setValue(partial_view[mvi.valueIndex()], zero);
496+
Int32 index = partial_indexes[i];
497+
Traits::setValue(partial_view[index], zero);
500498
};
501499
}
502500
else {
@@ -505,8 +503,8 @@ _initializeNewItems(const ComponentItemListBuilder& list_builder, RunQueue& queu
505503
command << RUNCOMMAND_LOOP1(iter, nb_partial)
506504
{
507505
auto [i] = iter();
508-
MatVarIndex mvi = partial_matvar[i];
509-
Traits::setValue(partial_view[mvi.valueIndex()], pure_view[partial_local_ids[i]]);
506+
Int32 index = partial_indexes[i];
507+
Traits::setValue(partial_view[index], pure_view[partial_local_ids[i]]);
510508
};
511509
}
512510
}

arcane/src/arcane/materials/MeshMaterialVariableIndexer.cc

+11-8
Original file line numberDiff line numberDiff line change
@@ -111,11 +111,11 @@ endUpdate(const ComponentItemListBuilderOld& builder)
111111
void MeshMaterialVariableIndexer::
112112
endUpdateAdd(const ComponentItemListBuilder& builder, RunQueue& queue)
113113
{
114-
SmallSpan<const MatVarIndex> pure_matvar = builder.pureMatVarIndexes();
115-
SmallSpan<const MatVarIndex> partial_matvar = builder.partialMatVarIndexes();
114+
SmallSpan<const Int32> pure_indexes = builder.pureIndexes();
115+
SmallSpan<const Int32> partial_indexes = builder.partialIndexes();
116116

117-
Integer nb_pure_to_add = pure_matvar.size();
118-
Integer nb_partial_to_add = partial_matvar.size();
117+
Integer nb_pure_to_add = pure_indexes.size();
118+
Integer nb_partial_to_add = partial_indexes.size();
119119
Integer total_to_add = nb_pure_to_add + nb_partial_to_add;
120120
Integer current_nb_item = nbItem();
121121
const Int32 new_size = current_nb_item + total_to_add;
@@ -132,17 +132,20 @@ endUpdateAdd(const ComponentItemListBuilder& builder, RunQueue& queue)
132132
auto command = makeCommand(queue);
133133
Arcane::Accelerator::ReducerMax2<Int32> max_index_reducer(command);
134134
Int32 max_to_add = math::max(nb_pure_to_add, nb_partial_to_add);
135+
const Int32 component_index = m_index + 1;
135136
command << RUNCOMMAND_LOOP1(iter, max_to_add, max_index_reducer)
136137
{
137138
auto [i] = iter();
138139
if (i < nb_pure_to_add) {
139-
local_ids_view[i] = pure_matvar[i].valueIndex();
140-
matvar_indexes[i] = pure_matvar[i];
140+
Int32 index = pure_indexes[i];
141+
local_ids_view[i] = index;
142+
matvar_indexes[i] = MatVarIndex(0, index);
141143
}
142144
if (i < nb_partial_to_add) {
145+
Int32 index = partial_indexes[i];
143146
local_ids_view[nb_pure_to_add + i] = local_ids_in_multiple[i];
144-
matvar_indexes[nb_pure_to_add + i] = partial_matvar[i];
145-
max_index_reducer.combine(partial_matvar[i].valueIndex());
147+
matvar_indexes[nb_pure_to_add + i] = MatVarIndex(component_index, index);
148+
max_index_reducer.combine(index);
146149
}
147150
};
148151
max_index_in_multiple = math::max(max_index_reducer.reducedValue(), m_max_index_in_multiple_array);

arcane/src/arcane/materials/internal/ComponentItemListBuilder.h

+10-10
Original file line numberDiff line numberDiff line change
@@ -43,36 +43,36 @@ class ARCANE_MATERIALS_EXPORT ComponentItemListBuilder
4343

4444
void preAllocate(Int32 nb_item)
4545
{
46-
m_pure_matvar_indexes.resize(nb_item);
47-
m_partial_matvar_indexes.resize(nb_item);
4846
m_partial_local_ids.resize(nb_item);
47+
m_pure_indexes.resize(nb_item);
48+
m_partial_indexes.resize(nb_item);
4949
}
5050

5151
void resize(Int32 nb_pure, Int32 nb_partial)
5252
{
53-
m_pure_matvar_indexes.resize(nb_pure);
54-
m_partial_matvar_indexes.resize(nb_partial);
5553
m_partial_local_ids.resize(nb_partial);
54+
m_pure_indexes.resize(nb_pure);
55+
m_partial_indexes.resize(nb_partial);
5656
}
5757

5858
public:
5959

60-
SmallSpan<MatVarIndex> pureMatVarIndexes() { return m_pure_matvar_indexes; }
61-
SmallSpan<MatVarIndex> partialMatVarIndexes() { return m_partial_matvar_indexes; }
60+
SmallSpan<Int32> pureIndexes() { return m_pure_indexes; }
61+
SmallSpan<Int32> partialIndexes() { return m_partial_indexes; }
6262
SmallSpan<Int32> partialLocalIds() { return m_partial_local_ids; }
6363

64-
SmallSpan<const MatVarIndex> pureMatVarIndexes() const { return m_pure_matvar_indexes; }
65-
SmallSpan<const MatVarIndex> partialMatVarIndexes() const { return m_partial_matvar_indexes; }
64+
SmallSpan<const Int32> pureIndexes() const { return m_pure_indexes; }
65+
SmallSpan<const Int32> partialIndexes() const { return m_partial_indexes; }
6666
SmallSpan<const Int32> partialLocalIds() const { return m_partial_local_ids; }
6767

6868
MeshMaterialVariableIndexer* indexer() const { return m_indexer; }
6969
void setIndexer(MeshMaterialVariableIndexer* indexer) { m_indexer = indexer; }
7070

7171
private:
7272

73-
NumArray<MatVarIndex, MDDim1> m_pure_matvar_indexes;
74-
NumArray<MatVarIndex, MDDim1> m_partial_matvar_indexes;
7573
NumArray<Int32, MDDim1> m_partial_local_ids;
74+
NumArray<Int32, MDDim1> m_pure_indexes;
75+
NumArray<Int32, MDDim1> m_partial_indexes;
7676

7777
MeshMaterialVariableIndexer* m_indexer = nullptr;
7878
};

0 commit comments

Comments
 (0)