Arcane  v4.1.0.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
ItemFunctor.cc
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2025 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/* ItemFunctor.cc (C) 2000-2025 */
9/* */
10/* Fonctor sur les entités. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arcane/core/ItemFunctor.h"
15#include "arcane/utils/Math.h"
16
17/*---------------------------------------------------------------------------*/
18/*---------------------------------------------------------------------------*/
19
20namespace Arcane
21{
22
23/*---------------------------------------------------------------------------*/
24/*---------------------------------------------------------------------------*/
25
26AbstractItemRangeFunctor::
27AbstractItemRangeFunctor(ItemVectorView items_view,Integer grain_size)
28: m_items(items_view)
29, m_block_size(SIMD_PADDING_SIZE)
30, m_nb_block(items_view.size())
31, m_block_grain_size(grain_size)
32{
33 // NOTE: si le range functor est utilisé pour la vectorisation, il faut
34 // que items_view.localIds() soit aligné. Le problème est qu'on ne sait
35 // pas exactement quel est l'alignement requis. On pourrait se base sur
36 // \a m_block_size et dire que l'alignement est m_block_size * sizeof(Int32).
37 // De toute facon, le problème éventuel d'alignement sera détecté par
38 // SimdItemEnumerator.
39 Integer nb_item = m_items.size();
40 m_nb_block = nb_item / m_block_size;
41 if ( (nb_item % m_block_size)!=0 )
42 ++m_nb_block;
43
44 m_block_grain_size = grain_size / m_block_size;
45}
46
47/*---------------------------------------------------------------------------*/
48/*---------------------------------------------------------------------------*/
49
50ItemVectorView AbstractItemRangeFunctor::
51_view(Integer begin_block, Integer nb_block, Int32* true_begin) const
52{
53 // Converti (begin_block,nb_block) en (begin,size) correspondant à m_items.
54 Integer begin = begin_block * m_block_size;
55 Integer nb_item = m_items.size();
56 Integer size = math::min(nb_block * m_block_size,nb_item-begin);
57 if (true_begin)
58 *true_begin = begin;
59 return m_items.subView(begin,size);
60}
61
62/*---------------------------------------------------------------------------*/
63/*---------------------------------------------------------------------------*/
64
65}
66
67/*---------------------------------------------------------------------------*/
68/*---------------------------------------------------------------------------*/
Vue sur un vecteur d'entités.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.