Arcane  v3.14.10.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/AcceleratorGlobal.h"
27
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
30
31/*---------------------------------------------------------------------------*/
32/*---------------------------------------------------------------------------*/
33
34// TODO: Faire les vues en ReadWrite pour les accesseurs SIMD
35
36namespace Arcane::Accelerator
37{
38template <typename DataType> class View1DGetterSetter;
39
40/*---------------------------------------------------------------------------*/
41/*---------------------------------------------------------------------------*/
45class ARCANE_ACCELERATOR_EXPORT VariableViewBase
46{
47 public:
48
50};
51
52/*---------------------------------------------------------------------------*/
53/*---------------------------------------------------------------------------*/
57template <typename DataType>
59{
60 // Pour accéder à m_data;
61 friend class View1DGetterSetter<DataType>;
62
63 public:
64
65 using ValueType = DataType;
67 explicit ARCCORE_HOST_DEVICE View1DSetter(SmallSpan<DataType> data)
68 : m_data(data)
69 {}
70 ARCCORE_HOST_DEVICE DataViewSetter<DataType> operator[](Int32 index) const
71 {
72 return DataViewSetter<DataType>(m_data.ptrAt(index));
73 }
74 ARCCORE_HOST_DEVICE DataViewSetter<DataType> operator()(Int32 index) const
75 {
76 return DataViewSetter<DataType>(m_data.ptrAt(index));
77 }
78 DataTypeReturnReference& operator=(const View1DSetter<DataType>& rhs) = delete;
79
80 public:
81
82 ARCCORE_HOST_DEVICE void copy(SmallSpan<const DataType> rhs)
83 {
84 m_data.copy(rhs);
85 }
86
87 private:
88
90};
91
92/*---------------------------------------------------------------------------*/
93/*---------------------------------------------------------------------------*/
97template <typename DataType>
99: public View1DSetter<DataType>
100{
101 using View1DSetter<DataType>::m_data;
102
103 public:
104
105 using ValueType = DataType;
107
108 public:
109
110 explicit ARCCORE_HOST_DEVICE View1DGetterSetter(SmallSpan<DataType> data)
112 {}
113 DataTypeReturnReference& operator=(const View1DGetterSetter<DataType>& rhs) = delete;
114
115 public:
116
117 ARCCORE_HOST_DEVICE DataViewGetterSetter<DataType> operator[](Int32 index) const
118 {
119 return DataViewGetterSetter<DataType>(m_data.ptrAt(index));
120 }
121
122 public:
123
124 ARCCORE_HOST_DEVICE SmallSpan<DataType> value() const { return m_data; }
125 ARCCORE_HOST_DEVICE operator SmallSpan<DataType>() { return m_data; }
126 ARCCORE_HOST_DEVICE operator SmallSpan<const DataType>() const { return m_data; }
127 ARCCORE_HOST_DEVICE operator Span<DataType>() { return { m_data.data(), m_data.size() }; }
128 ARCCORE_HOST_DEVICE operator Span<const DataType>() const { return { m_data.data(), m_data.size() }; }
129};
130
131/*---------------------------------------------------------------------------*/
132/*---------------------------------------------------------------------------*/
136template <typename _ItemType, typename _Accessor, typename _IndexerType, bool _HasSimd>
138: public VariableViewBase
139{
140 using Accessor = _Accessor;
141
142 public:
143
144 using ItemType = _ItemType;
146 using DataType = typename _Accessor::ValueType;
147 using DataTypeReturnReference = DataType&;
148
149 public:
150
152 : VariableViewBase(command, var)
153 , m_values(v.data())
154 , m_size(v.size())
155 {}
156
159 {
160 return SimdSetter<DataType>(m_values, simd_item.simdLocalIds());
161 }
162
168
170 ARCCORE_HOST_DEVICE Accessor operator[](IndexerType item) const
171 {
172 ARCANE_CHECK_AT(item.asInt32(), m_size);
173 return Accessor(this->m_values + item.asInt32());
174 }
175
177 ARCCORE_HOST_DEVICE Accessor operator()(IndexerType item) const
178 {
179 ARCANE_CHECK_AT(item.asInt32(), m_size);
180 return Accessor(this->m_values + item.asInt32());
181 }
182
184 ARCCORE_HOST_DEVICE Accessor value(IndexerType item) const
185 {
186 ARCANE_CHECK_AT(item.asInt32(), m_size);
187 return Accessor(this->m_values + item.asInt32());
188 }
189
191 ARCCORE_HOST_DEVICE void setValue(IndexerType item, const DataType& v) const
192 {
193 ARCANE_CHECK_AT(item.asInt32(), m_size);
194 this->m_values[item.asInt32()] = v;
195 }
196
197 private:
198
199 DataType* m_values;
200 Int32 m_size;
201};
202
203/*---------------------------------------------------------------------------*/
204/*---------------------------------------------------------------------------*/
208template <typename _ItemType, typename _Accessor>
210: public VariableViewBase
211{
212 public:
213
214 using DataType = typename _Accessor::ValueType;
215 using Accessor = _Accessor;
216 using ItemType = _ItemType;
217 using IndexerType = typename ItemTraitsT<_ItemType>::LocalIdType;
218 using DataTypeReturnReference = DataType&;
219
220 public:
221
223 : VariableViewBase(command, var)
224 , m_values(v.data())
225 , m_size(v.size())
226 {}
227
230 {
231 return SimdSetter<DataType>(m_values, simd_item.simdLocalIds());
232 }
233
239
241 ARCCORE_HOST_DEVICE Accessor operator[](IndexerType item) const
242 {
243 ARCANE_CHECK_AT(item.asInt32(), m_size);
244 return Accessor(this->m_values + item.asInt32());
245 }
246
248 ARCCORE_HOST_DEVICE Accessor operator()(IndexerType item) const
249 {
250 ARCANE_CHECK_AT(item.asInt32(), m_size);
251 return Accessor(this->m_values + item.asInt32());
252 }
253
255 ARCCORE_HOST_DEVICE Accessor value(IndexerType item) const
256 {
257 ARCANE_CHECK_AT(item.asInt32(), m_size);
258 return Accessor(this->m_values + item.asInt32());
259 }
260
262 ARCCORE_HOST_DEVICE void setValue(IndexerType item, const DataType& v) const
263 {
264 ARCANE_CHECK_AT(item.asInt32(), m_size);
265 this->m_values[item.asInt32()] = v;
266 }
267
268 private:
269
270 DataType* m_values;
271 Int32 m_size;
272};
273
274/*---------------------------------------------------------------------------*/
275/*---------------------------------------------------------------------------*/
279template <typename _ItemType, typename _Accessor>
281: public VariableViewBase
282{
283 public:
284
285 using DataType = typename _Accessor::ValueType;
286 using Accessor = _Accessor;
287 using ItemType = _ItemType;
289 using DataTypeReturnReference = DataType&;
290 using ItemLocalIdType = typename ItemTraitsT<_ItemType>::LocalIdType;
291
292 public:
293
296 : VariableViewBase(command, var)
297 , m_values(v.data())
298 , m_size(v.size())
299 , m_table_view(table_view)
300 {}
301
303 ARCCORE_HOST_DEVICE Accessor operator[](IndexerType item) const
304 {
305 ARCANE_CHECK_AT(item.asInt32(), m_size);
306 return Accessor(this->m_values + item.asInt32());
307 }
308
310 ARCCORE_HOST_DEVICE Accessor operator()(IndexerType item) const
311 {
312 ARCANE_CHECK_AT(item.asInt32(), m_size);
313 return Accessor(this->m_values + item.asInt32());
314 }
315
317 ARCCORE_HOST_DEVICE Accessor value(IndexerType item) const
318 {
319 ARCANE_CHECK_AT(item.asInt32(), m_size);
320 return Accessor(this->m_values + item.asInt32());
321 }
322
324 ARCCORE_HOST_DEVICE void setValue(IndexerType item, const DataType& v) const
325 {
326 ARCANE_CHECK_AT(item.asInt32(), m_size);
327 this->m_values[item.asInt32()] = v;
328 }
329
330 public:
331
333 ARCCORE_HOST_DEVICE Accessor operator[](ItemLocalIdType lid) const
334 {
335 Int32 index = _toIndex(lid);
336 ARCANE_CHECK_AT(index, m_size);
337 return Accessor(m_values + index);
338 }
339
341 ARCCORE_HOST_DEVICE Accessor operator()(ItemLocalIdType lid) const
342 {
343 Int32 index = _toIndex(lid);
344 ARCANE_CHECK_AT(index, m_size);
345 return Accessor(m_values + index);
346 }
347
349 ARCCORE_HOST_DEVICE Accessor value(ItemLocalIdType lid) const
350 {
351 Int32 index = _toIndex(lid);
352 ARCANE_CHECK_AT(index, m_size);
353 return Accessor(m_values + index);
354 }
355
357 ARCCORE_HOST_DEVICE void setValue(ItemLocalIdType lid, const DataType& v) const
358 {
359 Int32 index = _toIndex(lid);
360 ARCANE_CHECK_AT(index, m_size);
361 this->m_values[index] = v;
362 }
363
364 private:
365
366 ARCCORE_HOST_DEVICE Int32 _toIndex(ItemLocalIdType lid) const
367 {
368 return m_table_view[lid];
369 }
370
371 private:
372
373 DataType* m_values;
374 Int32 m_size;
375 GroupIndexTableView m_table_view;
376};
377
378/*---------------------------------------------------------------------------*/
379/*---------------------------------------------------------------------------*/
380
381/*---------------------------------------------------------------------------*/
382/*---------------------------------------------------------------------------*/
386template <typename _ItemType, typename _DataType>
388: public VariableViewBase
389{
390 public:
391
392 using ItemType = _ItemType;
393 using DataType = _DataType;
394 using IndexerType = typename ItemTraitsT<_ItemType>::LocalIdType;
395
396 public:
397
399 : VariableViewBase(command, var)
400 , m_values(v)
401 {
402 }
403
404 public:
405
409 {
410 typedef typename SimdTypeTraits<DataType>::SimdType SimdType;
411 return SimdType(m_values.data(), simd_item.simdLocalIds());
412 }
413
417 {
418 typedef typename SimdTypeTraits<DataType>::SimdType SimdType;
419 return SimdType(m_values.data() + simd_item.baseLocalId());
420 }
421
423 ARCCORE_HOST_DEVICE const DataType& operator[](IndexerType item) const
424 {
425 return this->m_values[item.asInt32()];
426 }
427
429 ARCCORE_HOST_DEVICE const DataType& operator()(IndexerType item) const
430 {
431 return this->m_values[item.asInt32()];
432 }
433
435 ARCCORE_HOST_DEVICE const DataType& value(IndexerType item) const
436 {
437 return this->m_values[item.asInt32()];
438 }
439
440 private:
441
443};
444
445/*---------------------------------------------------------------------------*/
446/*---------------------------------------------------------------------------*/
450template <typename _ItemType, typename _DataType>
452: public VariableViewBase
453{
454 public:
455
456 using ItemType = _ItemType;
457 using DataType = _DataType;
459 using ItemLocalIdType = typename ItemTraitsT<_ItemType>::LocalIdType;
460
461 public:
462
465 : VariableViewBase(command, var)
466 , m_values(v)
467 , m_table_view(table_view)
468 {}
469
470 public:
471
473 ARCCORE_HOST_DEVICE const DataType& operator[](IndexerType item) const
474 {
475 return m_values[item.asInt32()];
476 }
477
479 ARCCORE_HOST_DEVICE const DataType& operator()(IndexerType item) const
480 {
481 return m_values[item.asInt32()];
482 }
483
485 ARCCORE_HOST_DEVICE const DataType& value(IndexerType item) const
486 {
487 return m_values[item.asInt32()];
488 }
489
491 ARCCORE_HOST_DEVICE const DataType& operator[](ItemLocalIdType lid) const
492 {
493 return m_values[_toIndex(lid)];
494 }
495
497 ARCCORE_HOST_DEVICE const DataType& operator()(ItemLocalIdType lid) const
498 {
499 return m_values[_toIndex(lid)];
500 }
501
503 ARCCORE_HOST_DEVICE const DataType& value(ItemLocalIdType lid) const
504 {
505 return m_values[_toIndex(lid)];
506 }
507
508 private:
509
510 ARCCORE_HOST_DEVICE Int32 _toIndex(ItemLocalIdType lid) const
511 {
512 return m_table_view[lid];
513 }
514
515 private:
516
518 GroupIndexTableView m_table_view;
519};
520
521/*---------------------------------------------------------------------------*/
522/*---------------------------------------------------------------------------*/
523
524/*---------------------------------------------------------------------------*/
525/*---------------------------------------------------------------------------*/
529template <typename _ItemType, typename _DataType>
531: public VariableViewBase
532{
533 public:
534
535 using ItemType = _ItemType;
536 using DataType = _DataType;
538 using ItemLocalIdType = typename ItemTraitsT<_ItemType>::LocalIdType;
539
540 public:
541
544 : VariableViewBase(command, var)
545 , m_values(v)
546 , m_table_view(table_view)
547 {}
548
550 ARCCORE_HOST_DEVICE const SmallSpan<const DataType> operator[](IndexerType i) const
551 {
552 return this->m_values[i.asInt32()];
553 }
554
556 ARCCORE_HOST_DEVICE const SmallSpan<const DataType> operator[](ItemLocalIdType lid) const
557 {
558 return m_values[_toIndex(lid)];
559 }
560
562 ARCCORE_HOST_DEVICE const DataType& operator()(IndexerType item, Int32 i) const
563 {
564 return m_values[item.asInt32()][i];
565 }
566
568 ARCCORE_HOST_DEVICE const DataType& operator()(ItemLocalIdType lid, Int32 i) const
569 {
570 return m_values[_toIndex(lid)][i];
571 }
572
574 ARCCORE_HOST_DEVICE const SmallSpan<const DataType> value(IndexerType i) const
575 {
576 return m_values[i.asInt32()];
577 }
578
580 ARCCORE_HOST_DEVICE const SmallSpan<const DataType> value(ItemLocalIdType lid) const
581 {
582 return m_values[_toIndex(lid)];
583 }
584
585 protected:
586
587 ARCCORE_HOST_DEVICE Int32 _toIndex(ItemLocalIdType lid) const
588 {
589 return m_table_view[lid];
590 }
591
592 private:
593
595 GroupIndexTableView m_table_view;
596};
597
598/*---------------------------------------------------------------------------*/
599/*---------------------------------------------------------------------------*/
603template <typename _ItemType, typename _DataType>
605: public VariableViewBase
606{
607 private:
608
609 using IndexerType = typename ItemTraitsT<_ItemType>::LocalIdType;
610
611 public:
612
613 using DataType = _DataType;
614
615 public:
616
618 : VariableViewBase(command, var)
619 , m_values(v)
620 {}
621
622 public:
623
625 ARCCORE_HOST_DEVICE const SmallSpan<const DataType> operator[](IndexerType i) const
626 {
627 return this->m_values[i.asInt32()];
628 }
629
631 ARCCORE_HOST_DEVICE const DataType& operator()(IndexerType item, Int32 i) const
632 {
633 return this->m_values[item.asInt32()][i];
634 }
635
637 ARCCORE_HOST_DEVICE const SmallSpan<const DataType> value(IndexerType i) const
638 {
639 return this->m_values[i.asInt32()];
640 }
641
642 private:
643
645};
646
647/*---------------------------------------------------------------------------*/
648/*---------------------------------------------------------------------------*/
649
650/*---------------------------------------------------------------------------*/
651/*---------------------------------------------------------------------------*/
655template <typename _ItemType, typename _Accessor, typename _Indexer>
657: public VariableViewBase
658{
659 private:
660
661 using ItemType = _ItemType;
662 using Accessor = _Accessor;
663 using IndexerType = _Indexer;
664 using DataType = typename Accessor::ValueType;
665 using DataTypeReturnType = typename Accessor::DataTypeReturnReference;
666
667 public:
668
670 : VariableViewBase(command, var)
671 , m_values(v)
672 {}
673
675 ARCCORE_HOST_DEVICE DataTypeReturnType operator[](IndexerType item) const
676 {
677 return DataTypeReturnType(this->m_values[item.asInt32()]);
678 }
679
681 ARCCORE_HOST_DEVICE DataType& operator()(IndexerType item, Int32 i) const
682 {
683 return this->m_values[item.asInt32()][i];
684 }
685
687 ARCCORE_HOST_DEVICE SmallSpan<DataType> value(IndexerType item) const
688 {
689 return DataTypeReturnType(this->m_values[item.asInt32()]);
690 }
691
692 private:
693
694 SmallSpan2<DataType> m_values;
695};
696
697/*---------------------------------------------------------------------------*/
698/*---------------------------------------------------------------------------*/
702template <typename _ItemType, typename _Accessor>
704: public VariableViewBase
705{
706 public:
707
708 using ItemType = _ItemType;
709 using Accessor = _Accessor;
710 using IndexerType = typename ItemTraitsT<_ItemType>::LocalIdType;
711 using DataType = typename Accessor::ValueType;
712 using DataTypeReturnType = typename Accessor::DataTypeReturnReference;
713
714 public:
715
717 : VariableViewBase(command, var)
718 , m_values(v)
719 {}
720
722 ARCCORE_HOST_DEVICE DataTypeReturnType operator[](IndexerType item) const
723 {
724 return DataTypeReturnType(this->m_values[item.asInt32()]);
725 }
726
728 ARCCORE_HOST_DEVICE DataType& operator()(IndexerType item, Int32 i) const
729 {
730 return this->m_values[item.asInt32()][i];
731 }
732
734 ARCCORE_HOST_DEVICE SmallSpan<DataType> value(IndexerType item) const
735 {
736 return DataTypeReturnType(this->m_values[item.asInt32()]);
737 }
738
739 private:
740
741 SmallSpan2<DataType> m_values;
742};
743
744/*---------------------------------------------------------------------------*/
745/*---------------------------------------------------------------------------*/
749template <typename _ItemType, typename _Accessor>
751: public VariableViewBase
752{
753 public:
754
755 using ItemType = _ItemType;
756 using Accessor = _Accessor;
758 using DataType = typename Accessor::ValueType;
759 using DataTypeReturnType = typename Accessor::DataTypeReturnReference;
760 using ItemLocalIdType = typename ItemTraitsT<_ItemType>::LocalIdType;
761
762 public:
763
766 : VariableViewBase(command, var)
767 , m_values(v)
768 , m_table_view(table_view)
769 {}
770
771 public:
772
774 ARCCORE_HOST_DEVICE DataTypeReturnType operator[](IndexerType item) const
775 {
776 return DataTypeReturnType(m_values[item.asInt32()]);
777 }
778
780 ARCCORE_HOST_DEVICE DataType& operator()(IndexerType item, Int32 i) const
781 {
782 return m_values[item.asInt32()][i];
783 }
784
786 ARCCORE_HOST_DEVICE SmallSpan<DataType> value(IndexerType item) const
787 {
788 return DataTypeReturnType(m_values[item.asInt32()]);
789 }
790
791 public:
792
794 ARCCORE_HOST_DEVICE DataTypeReturnType operator[](ItemLocalIdType lid) const
795 {
796 return DataTypeReturnType(m_values[_toIndex(lid)]);
797 }
798
800 ARCCORE_HOST_DEVICE DataType& operator()(ItemLocalIdType lid, Int32 i) const
801 {
802 return m_values[_toIndex(lid)][i];
803 }
804
806 ARCCORE_HOST_DEVICE SmallSpan<DataType> value(ItemLocalIdType lid) const
807 {
808 return DataTypeReturnType(m_values[_toIndex(lid)]);
809 }
810
811 private:
812
813 ARCCORE_HOST_DEVICE Int32 _toIndex(ItemLocalIdType lid) const
814 {
815 return m_table_view[lid];
816 }
817
818 private:
819
820 SmallSpan2<DataType> m_values;
821 GroupIndexTableView m_table_view;
822};
823
824/*---------------------------------------------------------------------------*/
825/*---------------------------------------------------------------------------*/
845template <typename _ItemType, typename _Accessor>
847: public VariableViewBase
848{
849 public:
850
851 using ItemType = _ItemType;
852 using Accessor = _Accessor;
853 using IndexerType = typename ItemTraitsT<_ItemType>::LocalIdType;
854 using DataType = typename _Accessor::ValueType;
855 using DataTypeReturnReference = DataType&;
856
857 public:
858
861 : VariableViewBase(command, var)
862 , m_values(v.data())
863 , m_size(v.size())
864 {}
865
868 {
869 return SimdSetter<DataType>(m_values, simd_item.simdLocalIds());
870 }
871
874 {
875 return SimdSetter<DataType>(m_values, simd_item.simdLocalIds());
876 }
877
883
889
891 ARCCORE_HOST_DEVICE Accessor operator[](IndexerType item) const
892 {
893 ARCANE_CHECK_AT(item.asInt32(), m_size);
894 return Accessor(m_values + item.asInt32());
895 }
896
898 ARCCORE_HOST_DEVICE Accessor operator()(IndexerType item) const
899 {
900 ARCANE_CHECK_AT(item.asInt32(), m_size);
901 return Accessor(m_values + item.asInt32());
902 }
903
905 ARCCORE_HOST_DEVICE Accessor value(IndexerType item) const
906 {
907 ARCANE_CHECK_AT(item.asInt32(), m_size);
908 return Accessor(m_values + item.asInt32());
909 }
910
912 ARCCORE_HOST_DEVICE void setValue(IndexerType item, const DataType& v) const
913 {
914 ARCANE_CHECK_AT(item.asInt32(), m_size);
915 this->m_values[item.asInt32()] = v;
916 }
917
918 private:
919
920 DataType* m_values;
921 Int32 m_size;
922};
923
924/*---------------------------------------------------------------------------*/
925/*---------------------------------------------------------------------------*/
926
927template <typename _ItemType, typename _Accessor>
929: public VariableViewBase
930{
931 public:
932
933 using ItemType = _ItemType;
934 using Accessor = _Accessor;
936 using DataType = typename _Accessor::ValueType;
937 using DataTypeReturnReference = DataType&;
938 using ItemLocalIdType = typename ItemTraitsT<_ItemType>::LocalIdType;
939
940 public:
941
945 : VariableViewBase(command, var)
946 , m_values(v.data())
947 , m_size(v.size())
948 , m_table_view(table_view)
949 {}
950
951 public:
952
954 ARCCORE_HOST_DEVICE Accessor operator[](IndexerType item) const
955 {
956 ARCANE_CHECK_AT(item.asInt32(), m_size);
957 return Accessor(this->m_values + item.asInt32());
958 }
959
961 ARCCORE_HOST_DEVICE Accessor operator()(IndexerType item) const
962 {
963 ARCANE_CHECK_AT(item.asInt32(), m_size);
964 return Accessor(this->m_values + item.asInt32());
965 }
966
968 ARCCORE_HOST_DEVICE Accessor value(IndexerType item) const
969 {
970 ARCANE_CHECK_AT(item.asInt32(), m_size);
971 return Accessor(this->m_values + item.asInt32());
972 }
973
975 ARCCORE_HOST_DEVICE void setValue(IndexerType item, const DataType& v) const
976 {
977 ARCANE_CHECK_AT(item.asInt32(), m_size);
978 this->m_values[item.asInt32()] = v;
979 }
980
981 public:
982
984 ARCCORE_HOST_DEVICE Accessor operator[](ItemLocalIdType lid) const
985 {
986 Int32 index = _toIndex(lid);
987 ARCANE_CHECK_AT(index, m_size);
988 return Accessor(m_values + index);
989 }
990
992 ARCCORE_HOST_DEVICE Accessor operator()(ItemLocalIdType lid) const
993 {
994 Int32 index = _toIndex(lid);
995 ARCANE_CHECK_AT(index, m_size);
996 return Accessor(m_values + index);
997 }
998
1000 ARCCORE_HOST_DEVICE Accessor value(ItemLocalIdType lid) const
1001 {
1002 Int32 index = _toIndex(lid);
1003 ARCANE_CHECK_AT(index, m_size);
1004 return Accessor(m_values + index);
1005 }
1006
1008 ARCCORE_HOST_DEVICE void setValue(ItemLocalIdType lid, const DataType& v) const
1009 {
1010 Int32 index = _toIndex(lid);
1011 ARCANE_CHECK_AT(index, m_size);
1012 m_values[index] = v;
1013 }
1014
1015 private:
1016
1017 ARCCORE_HOST_DEVICE Int32 _toIndex(ItemLocalIdType lid) const
1018 {
1019 return m_table_view[lid];
1020 }
1021
1022 private:
1023
1024 DataType* m_values = nullptr;
1025 Int32 m_size = 0;
1026 GroupIndexTableView m_table_view;
1027};
1028
1029/*---------------------------------------------------------------------------*/
1030/*---------------------------------------------------------------------------*/
1031
1032/*---------------------------------------------------------------------------*/
1033/*---------------------------------------------------------------------------*/
1037template <typename ItemType, typename DataType> auto
1039{
1040 using Accessor = DataViewSetter<DataType>;
1041 return ItemVariableScalarOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1042}
1043
1047template <typename ItemType, typename DataType> auto
1049{
1050 using Accessor = DataViewSetter<DataType>;
1052 return ViewType(command, var.variable(), var.asArray(), var.tableView());
1053}
1054
1058template <typename ItemType> auto
1060{
1061 using Accessor = DataViewSetter<Real3>;
1062 return ItemVariableRealNScalarOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1063}
1064
1068template <typename ItemType> auto
1070{
1071 using Accessor = DataViewSetter<Real3>;
1073 return ViewType(command, var.variable(), var.asArray(), var.tableView());
1074}
1075
1079template <typename ItemType> auto
1081{
1082 using Accessor = DataViewSetter<Real2>;
1083 return ItemVariableRealNScalarOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1084}
1085
1089template <typename ItemType> auto
1091{
1092 using Accessor = DataViewSetter<Real2>;
1094 return ViewType(command, var.variable(), var.asArray(), var.tableView());
1095}
1096
1100template <typename ItemType, typename DataType> auto
1102{
1103 using Accessor = View1DSetter<DataType>;
1104 return ItemVariableArrayOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1105}
1106
1110template <typename ItemType, typename DataType> auto
1112{
1113 using Accessor = View1DSetter<DataType>;
1115 return ViewType(command, var.variable(), var.asArray(), var.tableView());
1116}
1117
1118/*---------------------------------------------------------------------------*/
1119/*---------------------------------------------------------------------------*/
1123template <typename ItemType, typename DataType> auto
1125{
1126 using Accessor = DataViewGetterSetter<DataType>;
1127 return ItemVariableScalarOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1128}
1129
1133template <typename ItemType, typename DataType> auto
1139
1143template <typename ItemType> auto
1145{
1146 using Accessor = DataViewGetterSetter<Real3>;
1147 return ItemVariableRealNScalarOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1148}
1149
1153template <typename ItemType> auto
1155{
1156 using Accessor = DataViewGetterSetter<Real3>;
1158 return ViewType(command, var.variable(), var.asArray(), var.tableView());
1159}
1160
1164template <typename ItemType> auto
1166{
1167 using Accessor = DataViewGetterSetter<Real2>;
1168 return ItemVariableRealNScalarOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1169}
1170
1174template <typename ItemType> auto
1176{
1177 using Accessor = DataViewGetterSetter<Real2>;
1179 return ViewType(command, var.variable(), var.asArray(), var.tableView());
1180}
1181
1185template <typename ItemType, typename DataType> auto
1187{
1188 using Accessor = View1DGetterSetter<DataType>;
1189 return ItemVariableArrayOutViewT<ItemType, Accessor>(command, var.variable(), var.asArray());
1190}
1191
1195template <typename ItemType, typename DataType> auto
1197{
1198 using Accessor = View1DGetterSetter<DataType>;
1200 return ViewType(command, var.variable(), var.asArray(), var.tableView());
1201}
1202
1203/*---------------------------------------------------------------------------*/
1204/*---------------------------------------------------------------------------*/
1208template <typename ItemType, typename DataType> auto
1210{
1211 return ItemPartialVariableScalarInViewT<ItemType, DataType>(command, var.variable(), var.asArray(), var.tableView());
1212}
1213
1217template <typename ItemType, typename DataType> auto
1219{
1220 return ItemVariableScalarInViewT<ItemType, DataType>(command, var.variable(), var.asArray());
1221}
1222
1226template <typename ItemType, typename DataType> auto
1228{
1229 return ItemPartialVariableArrayInViewT<ItemType, DataType>(command, var.variable(), var.asArray(), var.tableView());
1230}
1231
1235template <typename ItemType, typename DataType> auto
1237{
1238 return ItemVariableArrayInViewT<ItemType, DataType>(command, var.variable(), var.asArray());
1239}
1240
1241/*---------------------------------------------------------------------------*/
1242/*---------------------------------------------------------------------------*/
1243
1250
1257
1264
1271
1278
1285
1292
1293/*---------------------------------------------------------------------------*/
1294/*---------------------------------------------------------------------------*/
1295
1302
1309
1316
1323
1330
1337
1344
1345/*---------------------------------------------------------------------------*/
1346/*---------------------------------------------------------------------------*/
1347
1348} // End namespace Arcane::Accelerator
1349
1350/*---------------------------------------------------------------------------*/
1351/*---------------------------------------------------------------------------*/
1352
1353#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:120
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(RunCommand &cmd, CellMaterialVariableScalarRef< DataType > &var)
Vue en lecture/écriture pour les variables materiaux scalaire.
auto viewIn(RunCommand &cmd, const CellMaterialVariableScalarRef< DataType > &var)
Vue en lecture pour les variables materiaux scalaire.
auto viewOut(RunCommand &cmd, CellMaterialVariableScalarRef< DataType > &var)
Vue en écriture pour les variables materiaux scalaire.