Arcane  v3.15.0.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
VariableViews.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/* VariableViews.h (C) 2000-2024 */
9/* */
10/* Gestion des vues sur les variables pour les accélérateurs. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_ACCELERATOR_VARIABLEVIEWS_H
13#define ARCANE_ACCELERATOR_VARIABLEVIEWS_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/ArcaneCxx20.h"
18
21#include "arcane/core/ItemLocalId.h"
23#include "arcane/core/GroupIndexTable.h"
24
25#include "arcane/accelerator/core/ViewBuildInfo.h"
26#include "arcane/accelerator/AcceleratorGlobal.h"
28
29/*---------------------------------------------------------------------------*/
30/*---------------------------------------------------------------------------*/
31
32/*---------------------------------------------------------------------------*/
33/*---------------------------------------------------------------------------*/
34
35// TODO: Faire les vues en ReadWrite pour les accesseurs SIMD
36
37namespace Arcane::Accelerator
38{
39template <typename DataType> class View1DGetterSetter;
40
41/*---------------------------------------------------------------------------*/
42/*---------------------------------------------------------------------------*/
46class ARCANE_ACCELERATOR_EXPORT VariableViewBase
47{
48 public:
49
51};
52
53/*---------------------------------------------------------------------------*/
54/*---------------------------------------------------------------------------*/
58template <typename DataType>
60{
61 // Pour accéder à m_data;
62 friend class View1DGetterSetter<DataType>;
63
64 public:
65
66 using ValueType = DataType;
68 explicit ARCCORE_HOST_DEVICE View1DSetter(SmallSpan<DataType> data)
69 : m_data(data)
70 {}
71 ARCCORE_HOST_DEVICE DataViewSetter<DataType> operator[](Int32 index) const
72 {
73 return DataViewSetter<DataType>(m_data.ptrAt(index));
74 }
75 ARCCORE_HOST_DEVICE DataViewSetter<DataType> operator()(Int32 index) const
76 {
77 return DataViewSetter<DataType>(m_data.ptrAt(index));
78 }
79 DataTypeReturnReference& operator=(const View1DSetter<DataType>& rhs) = delete;
80
81 public:
82
83 ARCCORE_HOST_DEVICE void copy(SmallSpan<const DataType> rhs)
84 {
85 m_data.copy(rhs);
86 }
87
88 private:
89
91};
92
93/*---------------------------------------------------------------------------*/
94/*---------------------------------------------------------------------------*/
98template <typename DataType>
100: public View1DSetter<DataType>
101{
102 using View1DSetter<DataType>::m_data;
103
104 public:
105
106 using ValueType = DataType;
108
109 public:
110
111 explicit ARCCORE_HOST_DEVICE View1DGetterSetter(SmallSpan<DataType> data)
113 {}
114 DataTypeReturnReference& operator=(const View1DGetterSetter<DataType>& rhs) = delete;
115
116 public:
117
118 ARCCORE_HOST_DEVICE DataViewGetterSetter<DataType> operator[](Int32 index) const
119 {
120 return DataViewGetterSetter<DataType>(m_data.ptrAt(index));
121 }
122
123 public:
124
125 ARCCORE_HOST_DEVICE SmallSpan<DataType> value() const { return m_data; }
126 ARCCORE_HOST_DEVICE operator SmallSpan<DataType>() { return m_data; }
127 ARCCORE_HOST_DEVICE operator SmallSpan<const DataType>() const { return m_data; }
128 ARCCORE_HOST_DEVICE operator Span<DataType>() { return { m_data.data(), m_data.size() }; }
129 ARCCORE_HOST_DEVICE operator Span<const DataType>() const { return { m_data.data(), m_data.size() }; }
130};
131
132/*---------------------------------------------------------------------------*/
133/*---------------------------------------------------------------------------*/
137template <typename _ItemType, typename _Accessor, typename _IndexerType, bool _HasSimd>
139: public VariableViewBase
140{
141 using Accessor = _Accessor;
142
143 public:
144
145 using ItemType = _ItemType;
147 using DataType = typename _Accessor::ValueType;
148 using DataTypeReturnReference = DataType&;
149
150 public:
151
153 : VariableViewBase(command, var)
154 , m_values(v.data())
155 , m_size(v.size())
156 {}
157
160 {
161 return SimdSetter<DataType>(m_values, simd_item.simdLocalIds());
162 }
163
169
171 ARCCORE_HOST_DEVICE Accessor operator[](IndexerType item) const
172 {
173 ARCANE_CHECK_AT(item.asInt32(), m_size);
174 return Accessor(this->m_values + item.asInt32());
175 }
176
178 ARCCORE_HOST_DEVICE Accessor operator()(IndexerType item) const
179 {
180 ARCANE_CHECK_AT(item.asInt32(), m_size);
181 return Accessor(this->m_values + item.asInt32());
182 }
183
185 ARCCORE_HOST_DEVICE Accessor value(IndexerType item) const
186 {
187 ARCANE_CHECK_AT(item.asInt32(), m_size);
188 return Accessor(this->m_values + item.asInt32());
189 }
190
192 ARCCORE_HOST_DEVICE void setValue(IndexerType item, const DataType& v) const
193 {
194 ARCANE_CHECK_AT(item.asInt32(), m_size);
195 this->m_values[item.asInt32()] = v;
196 }
197
198 private:
199
200 DataType* m_values;
201 Int32 m_size;
202};
203
204/*---------------------------------------------------------------------------*/
205/*---------------------------------------------------------------------------*/
209template <typename _ItemType, typename _Accessor>
211: public VariableViewBase
212{
213 public:
214
215 using DataType = typename _Accessor::ValueType;
216 using Accessor = _Accessor;
217 using ItemType = _ItemType;
218 using IndexerType = typename ItemTraitsT<_ItemType>::LocalIdType;
219 using DataTypeReturnReference = DataType&;
220
221 public:
222
224 : VariableViewBase(command, var)
225 , m_values(v.data())
226 , m_size(v.size())
227 {}
228
231 {
232 return SimdSetter<DataType>(m_values, simd_item.simdLocalIds());
233 }
234
240
242 ARCCORE_HOST_DEVICE Accessor operator[](IndexerType item) const
243 {
244 ARCANE_CHECK_AT(item.asInt32(), m_size);
245 return Accessor(this->m_values + item.asInt32());
246 }
247
249 ARCCORE_HOST_DEVICE Accessor operator()(IndexerType item) const
250 {
251 ARCANE_CHECK_AT(item.asInt32(), m_size);
252 return Accessor(this->m_values + item.asInt32());
253 }
254
256 ARCCORE_HOST_DEVICE Accessor value(IndexerType item) const
257 {
258 ARCANE_CHECK_AT(item.asInt32(), m_size);
259 return Accessor(this->m_values + item.asInt32());
260 }
261
263 ARCCORE_HOST_DEVICE void setValue(IndexerType item, const DataType& v) const
264 {
265 ARCANE_CHECK_AT(item.asInt32(), m_size);
266 this->m_values[item.asInt32()] = v;
267 }
268
269 private:
270
271 DataType* m_values;
272 Int32 m_size;
273};
274
275/*---------------------------------------------------------------------------*/
276/*---------------------------------------------------------------------------*/
280template <typename _ItemType, typename _Accessor>
282: public VariableViewBase
283{
284 public:
285
286 using DataType = typename _Accessor::ValueType;
287 using Accessor = _Accessor;
288 using ItemType = _ItemType;
290 using DataTypeReturnReference = DataType&;
291 using ItemLocalIdType = typename ItemTraitsT<_ItemType>::LocalIdType;
292
293 public:
294
297 : VariableViewBase(command, var)
298 , m_values(v.data())
299 , m_size(v.size())
300 , m_table_view(table_view)
301 {}
302
304 ARCCORE_HOST_DEVICE Accessor operator[](IndexerType item) const
305 {
306 ARCANE_CHECK_AT(item.asInt32(), m_size);
307 return Accessor(this->m_values + item.asInt32());
308 }
309
311 ARCCORE_HOST_DEVICE Accessor operator()(IndexerType item) const
312 {
313 ARCANE_CHECK_AT(item.asInt32(), m_size);
314 return Accessor(this->m_values + item.asInt32());
315 }
316
318 ARCCORE_HOST_DEVICE Accessor value(IndexerType item) const
319 {
320 ARCANE_CHECK_AT(item.asInt32(), m_size);
321 return Accessor(this->m_values + item.asInt32());
322 }
323
325 ARCCORE_HOST_DEVICE void setValue(IndexerType item, const DataType& v) const
326 {
327 ARCANE_CHECK_AT(item.asInt32(), m_size);
328 this->m_values[item.asInt32()] = v;
329 }
330
331 public:
332
334 ARCCORE_HOST_DEVICE Accessor operator[](ItemLocalIdType lid) const
335 {
336 Int32 index = _toIndex(lid);
337 ARCANE_CHECK_AT(index, m_size);
338 return Accessor(m_values + index);
339 }
340
342 ARCCORE_HOST_DEVICE Accessor operator()(ItemLocalIdType lid) const
343 {
344 Int32 index = _toIndex(lid);
345 ARCANE_CHECK_AT(index, m_size);
346 return Accessor(m_values + index);
347 }
348
350 ARCCORE_HOST_DEVICE Accessor value(ItemLocalIdType lid) const
351 {
352 Int32 index = _toIndex(lid);
353 ARCANE_CHECK_AT(index, m_size);
354 return Accessor(m_values + index);
355 }
356
358 ARCCORE_HOST_DEVICE void setValue(ItemLocalIdType lid, const DataType& v) const
359 {
360 Int32 index = _toIndex(lid);
361 ARCANE_CHECK_AT(index, m_size);
362 this->m_values[index] = v;
363 }
364
365 private:
366
367 ARCCORE_HOST_DEVICE Int32 _toIndex(ItemLocalIdType lid) const
368 {
369 return m_table_view[lid];
370 }
371
372 private:
373
374 DataType* m_values;
375 Int32 m_size;
376 GroupIndexTableView m_table_view;
377};
378
379/*---------------------------------------------------------------------------*/
380/*---------------------------------------------------------------------------*/
381
382/*---------------------------------------------------------------------------*/
383/*---------------------------------------------------------------------------*/
387template <typename _ItemType, typename _DataType>
389: public VariableViewBase
390{
391 public:
392
393 using ItemType = _ItemType;
394 using DataType = _DataType;
395 using IndexerType = typename ItemTraitsT<_ItemType>::LocalIdType;
396
397 public:
398
400 : VariableViewBase(command, var)
401 , m_values(v)
402 {
403 }
404
405 public:
406
410 {
411 typedef typename SimdTypeTraits<DataType>::SimdType SimdType;
412 return SimdType(m_values.data(), simd_item.simdLocalIds());
413 }
414
418 {
419 typedef typename SimdTypeTraits<DataType>::SimdType SimdType;
420 return SimdType(m_values.data() + simd_item.baseLocalId());
421 }
422
424 ARCCORE_HOST_DEVICE const DataType& operator[](IndexerType item) const
425 {
426 return this->m_values[item.asInt32()];
427 }
428
430 ARCCORE_HOST_DEVICE const DataType& operator()(IndexerType item) const
431 {
432 return this->m_values[item.asInt32()];
433 }
434
436 ARCCORE_HOST_DEVICE const DataType& value(IndexerType item) const
437 {
438 return this->m_values[item.asInt32()];
439 }
440
441 private:
442
444};
445
446/*---------------------------------------------------------------------------*/
447/*---------------------------------------------------------------------------*/
451template <typename _ItemType, typename _DataType>
453: public VariableViewBase
454{
455 public:
456
457 using ItemType = _ItemType;
458 using DataType = _DataType;
460 using ItemLocalIdType = typename ItemTraitsT<_ItemType>::LocalIdType;
461
462 public:
463
466 : VariableViewBase(command, var)
467 , m_values(v)
468 , m_table_view(table_view)
469 {}
470
471 public:
472
474 ARCCORE_HOST_DEVICE const DataType& operator[](IndexerType item) const
475 {
476 return m_values[item.asInt32()];
477 }
478
480 ARCCORE_HOST_DEVICE const DataType& operator()(IndexerType item) const
481 {
482 return m_values[item.asInt32()];
483 }
484
486 ARCCORE_HOST_DEVICE const DataType& value(IndexerType item) const
487 {
488 return m_values[item.asInt32()];
489 }
490
492 ARCCORE_HOST_DEVICE const DataType& operator[](ItemLocalIdType lid) const
493 {
494 return m_values[_toIndex(lid)];
495 }
496
498 ARCCORE_HOST_DEVICE const DataType& operator()(ItemLocalIdType lid) const
499 {
500 return m_values[_toIndex(lid)];
501 }
502
504 ARCCORE_HOST_DEVICE const DataType& value(ItemLocalIdType lid) const
505 {
506 return m_values[_toIndex(lid)];
507 }
508
509 private:
510
511 ARCCORE_HOST_DEVICE Int32 _toIndex(ItemLocalIdType lid) const
512 {
513 return m_table_view[lid];
514 }
515
516 private:
517
519 GroupIndexTableView m_table_view;
520};
521
522/*---------------------------------------------------------------------------*/
523/*---------------------------------------------------------------------------*/
524
525/*---------------------------------------------------------------------------*/
526/*---------------------------------------------------------------------------*/
530template <typename _ItemType, typename _DataType>
532: public VariableViewBase
533{
534 public:
535
536 using ItemType = _ItemType;
537 using DataType = _DataType;
539 using ItemLocalIdType = typename ItemTraitsT<_ItemType>::LocalIdType;
540
541 public:
542
545 : VariableViewBase(command, var)
546 , m_values(v)
547 , m_table_view(table_view)
548 {}
549
551 ARCCORE_HOST_DEVICE const SmallSpan<const DataType> operator[](IndexerType i) const
552 {
553 return this->m_values[i.asInt32()];
554 }
555
557 ARCCORE_HOST_DEVICE const SmallSpan<const DataType> operator[](ItemLocalIdType lid) const
558 {
559 return m_values[_toIndex(lid)];
560 }
561
563 ARCCORE_HOST_DEVICE const DataType& operator()(IndexerType item, Int32 i) const
564 {
565 return m_values[item.asInt32()][i];
566 }
567
569 ARCCORE_HOST_DEVICE const DataType& operator()(ItemLocalIdType lid, Int32 i) const
570 {
571 return m_values[_toIndex(lid)][i];
572 }
573
575 ARCCORE_HOST_DEVICE const SmallSpan<const DataType> value(IndexerType i) const
576 {
577 return m_values[i.asInt32()];
578 }
579
581 ARCCORE_HOST_DEVICE const SmallSpan<const DataType> value(ItemLocalIdType lid) const
582 {
583 return m_values[_toIndex(lid)];
584 }
585
586 protected:
587
588 ARCCORE_HOST_DEVICE Int32 _toIndex(ItemLocalIdType lid) const
589 {
590 return m_table_view[lid];
591 }
592
593 private:
594
596 GroupIndexTableView m_table_view;
597};
598
599/*---------------------------------------------------------------------------*/
600/*---------------------------------------------------------------------------*/
604template <typename _ItemType, typename _DataType>
606: public VariableViewBase
607{
608 private:
609
610 using IndexerType = typename ItemTraitsT<_ItemType>::LocalIdType;
611
612 public:
613
614 using DataType = _DataType;
615
616 public:
617
619 : VariableViewBase(command, var)
620 , m_values(v)
621 {}
622
623 public:
624
626 ARCCORE_HOST_DEVICE const SmallSpan<const DataType> operator[](IndexerType i) const
627 {
628 return this->m_values[i.asInt32()];
629 }
630
632 ARCCORE_HOST_DEVICE const DataType& operator()(IndexerType item, Int32 i) const
633 {
634 return this->m_values[item.asInt32()][i];
635 }
636
638 ARCCORE_HOST_DEVICE const SmallSpan<const DataType> value(IndexerType i) const
639 {
640 return this->m_values[i.asInt32()];
641 }
642
643 private:
644
646};
647
648/*---------------------------------------------------------------------------*/
649/*---------------------------------------------------------------------------*/
650
651/*---------------------------------------------------------------------------*/
652/*---------------------------------------------------------------------------*/
656template <typename _ItemType, typename _Accessor, typename _Indexer>
658: public VariableViewBase
659{
660 private:
661
662 using ItemType = _ItemType;
663 using Accessor = _Accessor;
664 using IndexerType = _Indexer;
665 using DataType = typename Accessor::ValueType;
666 using DataTypeReturnType = typename Accessor::DataTypeReturnReference;
667
668 public:
669
671 : VariableViewBase(command, var)
672 , m_values(v)
673 {}
674
676 ARCCORE_HOST_DEVICE DataTypeReturnType operator[](IndexerType item) const
677 {
678 return DataTypeReturnType(this->m_values[item.asInt32()]);
679 }
680
682 ARCCORE_HOST_DEVICE DataType& operator()(IndexerType item, Int32 i) const
683 {
684 return this->m_values[item.asInt32()][i];
685 }
686
688 ARCCORE_HOST_DEVICE SmallSpan<DataType> value(IndexerType item) const
689 {
690 return DataTypeReturnType(this->m_values[item.asInt32()]);
691 }
692
693 private:
694
695 SmallSpan2<DataType> m_values;
696};
697
698/*---------------------------------------------------------------------------*/
699/*---------------------------------------------------------------------------*/
703template <typename _ItemType, typename _Accessor>
705: public VariableViewBase
706{
707 public:
708
709 using ItemType = _ItemType;
710 using Accessor = _Accessor;
711 using IndexerType = typename ItemTraitsT<_ItemType>::LocalIdType;
712 using DataType = typename Accessor::ValueType;
713 using DataTypeReturnType = typename Accessor::DataTypeReturnReference;
714
715 public:
716
718 : VariableViewBase(command, var)
719 , m_values(v)
720 {}
721
723 ARCCORE_HOST_DEVICE DataTypeReturnType operator[](IndexerType item) const
724 {
725 return DataTypeReturnType(this->m_values[item.asInt32()]);
726 }
727
729 ARCCORE_HOST_DEVICE DataType& operator()(IndexerType item, Int32 i) const
730 {
731 return this->m_values[item.asInt32()][i];
732 }
733
735 ARCCORE_HOST_DEVICE SmallSpan<DataType> value(IndexerType item) const
736 {
737 return DataTypeReturnType(this->m_values[item.asInt32()]);
738 }
739
740 private:
741
742 SmallSpan2<DataType> m_values;
743};
744
745/*---------------------------------------------------------------------------*/
746/*---------------------------------------------------------------------------*/
750template <typename _ItemType, typename _Accessor>
752: public VariableViewBase
753{
754 public:
755
756 using ItemType = _ItemType;
757 using Accessor = _Accessor;
759 using DataType = typename Accessor::ValueType;
760 using DataTypeReturnType = typename Accessor::DataTypeReturnReference;
761 using ItemLocalIdType = typename ItemTraitsT<_ItemType>::LocalIdType;
762
763 public:
764
767 : VariableViewBase(command, var)
768 , m_values(v)
769 , m_table_view(table_view)
770 {}
771
772 public:
773
775 ARCCORE_HOST_DEVICE DataTypeReturnType operator[](IndexerType item) const
776 {
777 return DataTypeReturnType(m_values[item.asInt32()]);
778 }
779
781 ARCCORE_HOST_DEVICE DataType& operator()(IndexerType item, Int32 i) const
782 {
783 return m_values[item.asInt32()][i];
784 }
785
787 ARCCORE_HOST_DEVICE SmallSpan<DataType> value(IndexerType item) const
788 {
789 return DataTypeReturnType(m_values[item.asInt32()]);
790 }
791
792 public:
793
795 ARCCORE_HOST_DEVICE DataTypeReturnType operator[](ItemLocalIdType lid) const
796 {
797 return DataTypeReturnType(m_values[_toIndex(lid)]);
798 }
799
801 ARCCORE_HOST_DEVICE DataType& operator()(ItemLocalIdType lid, Int32 i) const
802 {
803 return m_values[_toIndex(lid)][i];
804 }
805
807 ARCCORE_HOST_DEVICE SmallSpan<DataType> value(ItemLocalIdType lid) const
808 {
809 return DataTypeReturnType(m_values[_toIndex(lid)]);
810 }
811
812 private:
813
814 ARCCORE_HOST_DEVICE Int32 _toIndex(ItemLocalIdType lid) const
815 {
816 return m_table_view[lid];
817 }
818
819 private:
820
821 SmallSpan2<DataType> m_values;
822 GroupIndexTableView m_table_view;
823};
824
825/*---------------------------------------------------------------------------*/
826/*---------------------------------------------------------------------------*/
846template <typename _ItemType, typename _Accessor>
848: public VariableViewBase
849{
850 public:
851
852 using ItemType = _ItemType;
853 using Accessor = _Accessor;
854 using IndexerType = typename ItemTraitsT<_ItemType>::LocalIdType;
855 using DataType = typename _Accessor::ValueType;
856 using DataTypeReturnReference = DataType&;
857
858 public:
859
862 : VariableViewBase(command, var)
863 , m_values(v.data())
864 , m_size(v.size())
865 {}
866
869 {
870 return SimdSetter<DataType>(m_values, simd_item.simdLocalIds());
871 }
872
875 {
876 return SimdSetter<DataType>(m_values, simd_item.simdLocalIds());
877 }
878
884
890
892 ARCCORE_HOST_DEVICE Accessor operator[](IndexerType item) const
893 {
894 ARCANE_CHECK_AT(item.asInt32(), m_size);
895 return Accessor(m_values + item.asInt32());
896 }
897
899 ARCCORE_HOST_DEVICE Accessor operator()(IndexerType item) const
900 {
901 ARCANE_CHECK_AT(item.asInt32(), m_size);
902 return Accessor(m_values + item.asInt32());
903 }
904
906 ARCCORE_HOST_DEVICE Accessor value(IndexerType item) const
907 {
908 ARCANE_CHECK_AT(item.asInt32(), m_size);
909 return Accessor(m_values + item.asInt32());
910 }
911
913 ARCCORE_HOST_DEVICE void setValue(IndexerType item, const DataType& v) const
914 {
915 ARCANE_CHECK_AT(item.asInt32(), m_size);
916 this->m_values[item.asInt32()] = v;
917 }
918
919 private:
920
921 DataType* m_values;
922 Int32 m_size;
923};
924
925/*---------------------------------------------------------------------------*/
926/*---------------------------------------------------------------------------*/
927
928template <typename _ItemType, typename _Accessor>
930: public VariableViewBase
931{
932 public:
933
934 using ItemType = _ItemType;
935 using Accessor = _Accessor;
937 using DataType = typename _Accessor::ValueType;
938 using DataTypeReturnReference = DataType&;
939 using ItemLocalIdType = typename ItemTraitsT<_ItemType>::LocalIdType;
940
941 public:
942
946 : VariableViewBase(command, var)
947 , m_values(v.data())
948 , m_size(v.size())
949 , m_table_view(table_view)
950 {}
951
952 public:
953
955 ARCCORE_HOST_DEVICE Accessor operator[](IndexerType item) const
956 {
957 ARCANE_CHECK_AT(item.asInt32(), m_size);
958 return Accessor(this->m_values + item.asInt32());
959 }
960
962 ARCCORE_HOST_DEVICE Accessor operator()(IndexerType item) const
963 {
964 ARCANE_CHECK_AT(item.asInt32(), m_size);
965 return Accessor(this->m_values + item.asInt32());
966 }
967
969 ARCCORE_HOST_DEVICE Accessor value(IndexerType item) const
970 {
971 ARCANE_CHECK_AT(item.asInt32(), m_size);
972 return Accessor(this->m_values + item.asInt32());
973 }
974
976 ARCCORE_HOST_DEVICE void setValue(IndexerType item, const DataType& v) const
977 {
978 ARCANE_CHECK_AT(item.asInt32(), m_size);
979 this->m_values[item.asInt32()] = v;
980 }
981
982 public:
983
985 ARCCORE_HOST_DEVICE Accessor operator[](ItemLocalIdType lid) const
986 {
987 Int32 index = _toIndex(lid);
988 ARCANE_CHECK_AT(index, m_size);
989 return Accessor(m_values + index);
990 }
991
993 ARCCORE_HOST_DEVICE Accessor operator()(ItemLocalIdType lid) const
994 {
995 Int32 index = _toIndex(lid);
996 ARCANE_CHECK_AT(index, m_size);
997 return Accessor(m_values + index);
998 }
999
1001 ARCCORE_HOST_DEVICE Accessor value(ItemLocalIdType lid) const
1002 {
1003 Int32 index = _toIndex(lid);
1004 ARCANE_CHECK_AT(index, m_size);
1005 return Accessor(m_values + index);
1006 }
1007
1009 ARCCORE_HOST_DEVICE void setValue(ItemLocalIdType lid, const DataType& v) const
1010 {
1011 Int32 index = _toIndex(lid);
1012 ARCANE_CHECK_AT(index, m_size);
1013 m_values[index] = v;
1014 }
1015
1016 private:
1017
1018 ARCCORE_HOST_DEVICE Int32 _toIndex(ItemLocalIdType lid) const
1019 {
1020 return m_table_view[lid];
1021 }
1022
1023 private:
1024
1025 DataType* m_values = nullptr;
1026 Int32 m_size = 0;
1027 GroupIndexTableView m_table_view;
1028};
1029
1030/*---------------------------------------------------------------------------*/
1031/*---------------------------------------------------------------------------*/
1032
1033/*---------------------------------------------------------------------------*/
1034/*---------------------------------------------------------------------------*/
1038template <typename ItemType, typename DataType> auto
1040{
1041 using Accessor = DataViewSetter<DataType>;
1042 return ItemVariableScalarOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1043}
1044
1048template <typename ItemType, typename DataType> auto
1050{
1051 using Accessor = DataViewSetter<DataType>;
1053 return ViewType(command, var.variable(), var.asArray(), var.tableView());
1054}
1055
1059template <typename ItemType> auto
1061{
1062 using Accessor = DataViewSetter<Real3>;
1063 return ItemVariableRealNScalarOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1064}
1065
1069template <typename ItemType> auto
1071{
1072 using Accessor = DataViewSetter<Real3>;
1074 return ViewType(command, var.variable(), var.asArray(), var.tableView());
1075}
1076
1080template <typename ItemType> auto
1082{
1083 using Accessor = DataViewSetter<Real2>;
1084 return ItemVariableRealNScalarOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1085}
1086
1090template <typename ItemType> auto
1092{
1093 using Accessor = DataViewSetter<Real2>;
1095 return ViewType(command, var.variable(), var.asArray(), var.tableView());
1096}
1097
1101template <typename ItemType, typename DataType> auto
1103{
1104 using Accessor = View1DSetter<DataType>;
1105 return ItemVariableArrayOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1106}
1107
1111template <typename ItemType, typename DataType> auto
1113{
1114 using Accessor = View1DSetter<DataType>;
1116 return ViewType(command, var.variable(), var.asArray(), var.tableView());
1117}
1118
1119/*---------------------------------------------------------------------------*/
1120/*---------------------------------------------------------------------------*/
1124template <typename ItemType, typename DataType> auto
1126{
1127 using Accessor = DataViewGetterSetter<DataType>;
1128 return ItemVariableScalarOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1129}
1130
1134template <typename ItemType, typename DataType> auto
1140
1144template <typename ItemType> auto
1146{
1147 using Accessor = DataViewGetterSetter<Real3>;
1148 return ItemVariableRealNScalarOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1149}
1150
1154template <typename ItemType> auto
1156{
1157 using Accessor = DataViewGetterSetter<Real3>;
1159 return ViewType(command, var.variable(), var.asArray(), var.tableView());
1160}
1161
1165template <typename ItemType> auto
1167{
1168 using Accessor = DataViewGetterSetter<Real2>;
1169 return ItemVariableRealNScalarOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1170}
1171
1175template <typename ItemType> auto
1177{
1178 using Accessor = DataViewGetterSetter<Real2>;
1180 return ViewType(command, var.variable(), var.asArray(), var.tableView());
1181}
1182
1186template <typename ItemType, typename DataType> auto
1188{
1189 using Accessor = View1DGetterSetter<DataType>;
1190 return ItemVariableArrayOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1191}
1192
1196template <typename ItemType, typename DataType> auto
1198{
1199 using Accessor = View1DGetterSetter<DataType>;
1201 return ViewType(command, var.variable(), var.asArray(), var.tableView());
1202}
1203
1204/*---------------------------------------------------------------------------*/
1205/*---------------------------------------------------------------------------*/
1209template <typename ItemType, typename DataType> auto
1211{
1212 return ItemPartialVariableScalarInViewT<ItemType, DataType>(command, var.variable(), var.asArray(), var.tableView());
1213}
1214
1218template <typename ItemType, typename DataType> auto
1220{
1221 return ItemVariableScalarInViewT<ItemType, DataType>(command, var.variable(), var.asArray());
1222}
1223
1227template <typename ItemType, typename DataType> auto
1229{
1230 return ItemPartialVariableArrayInViewT<ItemType, DataType>(command, var.variable(), var.asArray(), var.tableView());
1231}
1232
1236template <typename ItemType, typename DataType> auto
1238{
1239 return ItemVariableArrayInViewT<ItemType, DataType>(command, var.variable(), var.asArray());
1240}
1241
1242/*---------------------------------------------------------------------------*/
1243/*---------------------------------------------------------------------------*/
1244
1251
1258
1265
1272
1279
1286
1293
1294/*---------------------------------------------------------------------------*/
1295/*---------------------------------------------------------------------------*/
1296
1303
1310
1317
1324
1331
1338
1345
1346/*---------------------------------------------------------------------------*/
1347/*---------------------------------------------------------------------------*/
1348
1349} // End namespace Arcane::Accelerator
1350
1351/*---------------------------------------------------------------------------*/
1352/*---------------------------------------------------------------------------*/
1353
1354#endif
Déclarations de types sur les entités.
Vue en lecture sur une variable partielle tableau du maillage.
ARCCORE_HOST_DEVICE const SmallSpan< const DataType > operator[](IndexerType i) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE const SmallSpan< const DataType > operator[](ItemLocalIdType lid) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE const DataType & operator()(IndexerType item, Int32 i) const
Opérateur d'accès pour la i-ème valeur de l'entité item.
ARCCORE_HOST_DEVICE const SmallSpan< const DataType > value(IndexerType i) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE const DataType & operator()(ItemLocalIdType lid, Int32 i) const
Opérateur d'accès pour la i-ème valeur de l'entité item.
ARCCORE_HOST_DEVICE const SmallSpan< const DataType > value(ItemLocalIdType lid) const
Opérateur d'accès pour l'entité item.
Vue en écriture sur une variable partielle tableau du maillage.
ARCCORE_HOST_DEVICE DataType & operator()(IndexerType item, Int32 i) const
Opérateur d'accès pour la i-ème valeur de l'entité item.
ARCCORE_HOST_DEVICE DataTypeReturnType operator[](ItemLocalIdType lid) const
Opérateur d'accès pour l'entité de numéro local lid.
ARCCORE_HOST_DEVICE DataTypeReturnType operator[](IndexerType item) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE SmallSpan< DataType > value(IndexerType item) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE DataType & operator()(ItemLocalIdType lid, Int32 i) const
Opérateur d'accès pour l'entité de numéro local lid.
ARCCORE_HOST_DEVICE SmallSpan< DataType > value(ItemLocalIdType lid) const
Opérateur d'accès pour la i-ème valeur de l'entité item.
ARCCORE_HOST_DEVICE Accessor operator()(ItemLocalIdType lid) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE Accessor operator[](ItemLocalIdType lid) const
Opérateur d'accès pour l'entité item.
ItemPartialVariableRealNScalarOutViewT(const ViewBuildInfo &command, IVariable *var, SmallSpan< DataType > v, GroupIndexTableView table_view)
Construit la vue.
ARCCORE_HOST_DEVICE void setValue(IndexerType item, const DataType &v) const
Positionne la valeur pour l'entité item à v.
ARCCORE_HOST_DEVICE void setValue(ItemLocalIdType lid, const DataType &v) const
Positionne la valeur pour l'entité item à v.
ARCCORE_HOST_DEVICE Accessor value(ItemLocalIdType lid) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE Accessor value(IndexerType item) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE Accessor operator[](IndexerType item) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE Accessor operator()(IndexerType item) const
Opérateur d'accès pour l'entité item.
Vue en lecture sur une variable partielle scalaire du maillage.
ARCCORE_HOST_DEVICE const DataType & value(ItemLocalIdType lid) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE const DataType & operator[](IndexerType item) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE const DataType & value(IndexerType item) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE const DataType & operator()(ItemLocalIdType lid) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE const DataType & operator()(IndexerType item) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE const DataType & operator[](ItemLocalIdType lid) const
Opérateur d'accès pour l'entité item.
Vue en écriture sur une variable partielle scalaire du maillage.
ARCCORE_HOST_DEVICE Accessor value(IndexerType item) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE Accessor operator[](IndexerType item) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE Accessor operator()(ItemLocalIdType lid) const
Opérateur d'accès pour l'entité de numéro local lid.
ARCCORE_HOST_DEVICE Accessor operator[](ItemLocalIdType lid) const
Opérateur d'accès pour l'entité de numéro local lid.
ARCCORE_HOST_DEVICE Accessor operator()(IndexerType item) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE void setValue(IndexerType item, const DataType &v) const
Positionne la valeur pour l'entité item à v.
ARCCORE_HOST_DEVICE Accessor value(ItemLocalIdType lid) const
Opérateur d'accès pour l'entité de numéro local lid.
ARCCORE_HOST_DEVICE void setValue(ItemLocalIdType lid, const DataType &v) const
Positionne la valeur pour l'entité de numéro local lid à v.
Vue en lecture sur une variable tableau du maillage.
ARCCORE_HOST_DEVICE const SmallSpan< const DataType > value(IndexerType i) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE const SmallSpan< const DataType > operator[](IndexerType i) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE const DataType & operator()(IndexerType item, Int32 i) const
Opérateur d'accès pour la i-ème valeur de l'entité item.
Vue en écriture sur une variable tableau du maillage.
ARCCORE_HOST_DEVICE SmallSpan< DataType > value(IndexerType item) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE DataType & operator()(IndexerType item, Int32 i) const
Opérateur d'accès pour la i-ème valeur de l'entité item.
ARCCORE_HOST_DEVICE DataTypeReturnType operator[](IndexerType item) const
Opérateur d'accès pour l'entité item.
Vue en écriture sur une variable tableau du maillage.
ARCCORE_HOST_DEVICE DataTypeReturnType operator[](IndexerType item) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE DataType & operator()(IndexerType item, Int32 i) const
Opérateur d'accès pour la i-ème valeur de l'entité item.
ARCCORE_HOST_DEVICE SmallSpan< DataType > value(IndexerType item) const
Opérateur d'accès pour l'entité item.
Vue en écriture sur une variable scalaire de type 'RealN' du maillage.
ItemVariableRealNScalarOutViewT(const ViewBuildInfo &command, IVariable *var, SmallSpan< DataType > v)
Construit la vue.
SimdDirectSetter< DataType > operator()(SimdItemDirectIndexT< ItemType > simd_item) const
Opérateur d'accès vectoriel sans indirection.
ARCCORE_HOST_DEVICE Accessor value(IndexerType item) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE Accessor operator()(IndexerType item) const
Opérateur d'accès pour l'entité item.
SimdDirectSetter< DataType > operator[](SimdItemDirectIndexT< ItemType > simd_item) const
Opérateur d'accès vectoriel sans indirection.
ARCCORE_HOST_DEVICE void setValue(IndexerType item, const DataType &v) const
Positionne la valeur pour l'entité item à v.
ARCCORE_HOST_DEVICE Accessor operator[](IndexerType item) const
Opérateur d'accès pour l'entité item.
SimdSetter< DataType > operator()(SimdItemIndexT< ItemType > simd_item) const
Opérateur d'accès vectoriel avec indirection.
SimdSetter< DataType > operator[](SimdItemIndexT< ItemType > simd_item) const
Opérateur d'accès vectoriel avec indirection.
Vue en lecture sur une variable scalaire du maillage.
SimdTypeTraits< DataType >::SimdType operator[](SimdItemIndexT< ItemType > simd_item) const
Opérateur d'accès vectoriel avec indirection.
SimdTypeTraits< DataType >::SimdType operator[](SimdItemDirectIndexT< ItemType > simd_item) const
Opérateur d'accès vectoriel avec indirection.
ARCCORE_HOST_DEVICE const DataType & operator()(IndexerType item) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE const DataType & value(IndexerType item) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE const DataType & operator[](IndexerType item) const
Opérateur d'accès pour l'entité item.
Vue en écriture sur une variable scalaire du maillage.
ARCCORE_HOST_DEVICE void setValue(IndexerType item, const DataType &v) const
Positionne la valeur pour l'entité item à v.
ARCCORE_HOST_DEVICE Accessor operator()(IndexerType item) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE Accessor operator[](IndexerType item) const
Opérateur d'accès pour l'entité item.
SimdSetter< DataType > operator[](SimdItemIndexT< ItemType > simd_item) const
Opérateur d'accès vectoriel avec indirection.
SimdDirectSetter< DataType > operator[](SimdItemDirectIndexT< ItemType > simd_item) const
Opérateur d'accès vectoriel sans indirection.
ARCCORE_HOST_DEVICE Accessor value(IndexerType item) const
Opérateur d'accès pour l'entité item.
Vue en écriture sur une variable scalaire du maillage.
SimdSetter< DataType > operator[](SimdItemIndexT< ItemType > simd_item) const
Opérateur d'accès vectoriel avec indirection.
ARCCORE_HOST_DEVICE Accessor operator[](IndexerType item) const
Opérateur d'accès pour l'entité item.
ARCCORE_HOST_DEVICE void setValue(IndexerType item, const DataType &v) const
Positionne la valeur pour l'entité item à v.
ARCCORE_HOST_DEVICE Accessor operator()(IndexerType item) const
Opérateur d'accès pour l'entité item.
SimdDirectSetter< DataType > operator[](SimdItemDirectIndexT< ItemType > simd_item) const
Opérateur d'accès vectoriel sans indirection.
ARCCORE_HOST_DEVICE Accessor value(IndexerType item) const
Opérateur d'accès pour l'entité item.
Classe de base des vues sur les variables.
Classe pour accéder à un tableau 1D d'une vue en lecture/écriture.
Classe pour accéder à un tableau 1D d'une vue en lecture/écriture.
Informations pour construire une vue pour les données sur accélérateur.
Interface d'une variable.
Definition IVariable.h:54
Caractéristiques des éléments du maillage.
Definition ItemTypes.h:621
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:149
constexpr ARCCORE_HOST_DEVICE pointer ptrAt(SizeType index) const
Addresse du index-ème élément.
Definition Span.h:240
ARCCORE_HOST_DEVICE void copy(const U &copy_array)
Recopie le tableau copy_array dans l'instance.
Definition Span.h:357
constexpr ARCCORE_HOST_DEVICE pointer data() const noexcept
Pointeur sur le début de la vue.
Definition Span.h:419
constexpr ARCCORE_HOST_DEVICE SizeType size() const noexcept
Retourne la taille du tableau.
Definition Span.h:209
Espace de nom pour l'utilisation des accélérateurs.
auto viewInOut(const ViewBuildInfo &vbi, CellMaterialVariableScalarRef< DataType > &var)
Vue en lecture/écriture pour les variables materiaux scalaire.
auto viewOut(const ViewBuildInfo &vbi, CellMaterialVariableScalarRef< DataType > &var)
Vue en écriture pour les variables materiaux scalaire.
auto viewIn(const ViewBuildInfo &vbi, const CellMaterialVariableScalarRef< DataType > &var)
Vue en lecture pour les variables materiaux scalaire.