Arcane  v4.1.4.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
SpecificMemoryCopy.cc
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2026 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/* SpecificMemoryCopy.cc (C) 2000-2026 */
9/* */
10/* Classes pour gérer des fonctions spécialisées de copie mémoire. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arccore/common/internal/SpecificMemoryCopyList.h"
15#include "arccore/common/internal/HostSpecificMemoryCopy.h"
16
17/*---------------------------------------------------------------------------*/
18/*---------------------------------------------------------------------------*/
19
20namespace Arcane::Impl
21{
22
23ISpecificMemoryCopyList* GlobalMemoryCopyList::default_global_copy_list = nullptr;
24ISpecificMemoryCopyList* GlobalMemoryCopyList::accelerator_global_copy_list = nullptr;
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28
30{
31 public:
32
33 using InterfaceType = ISpecificMemoryCopy;
34 template <typename DataType, typename Extent> using SpecificType = HostSpecificMemoryCopy<DataType, Extent>;
35 using RefType = SpecificMemoryCopyRef<HostIndexedCopyTraits>;
36};
37
38//! Copieur spécifique lorsqu'aucun runtime accélérateur n'est initialisé
40: public SpecificMemoryCopyList<Impl::HostIndexedCopyTraits>
41{
42 public:
43
45 {
47 //! Ajoute des implémentations spécifiques pour les tailles courantes
48 addCopier<SpecificType<std::byte, ExtentValue<1>>>(); // 1
49 addCopier<SpecificType<Int16, ExtentValue<1>>>(); // 2
50 addCopier<SpecificType<std::byte, ExtentValue<3>>>(); // 3
51 addCopier<SpecificType<Int32, ExtentValue<1>>>(); // 4
52 addCopier<SpecificType<std::byte, ExtentValue<5>>>(); // 5
53 addCopier<SpecificType<Int16, ExtentValue<3>>>(); // 6
54 addCopier<SpecificType<std::byte, ExtentValue<7>>>(); // 7
55 addCopier<SpecificType<Int64, ExtentValue<1>>>(); // 8
56 addCopier<SpecificType<std::byte, ExtentValue<9>>>(); // 9
57 addCopier<SpecificType<Int16, ExtentValue<5>>>(); // 10
58 addCopier<SpecificType<Int32, ExtentValue<3>>>(); // 12
59
60 addCopier<SpecificType<Int64, ExtentValue<2>>>(); // 16
61 addCopier<SpecificType<Int64, ExtentValue<3>>>(); // 24
62 addCopier<SpecificType<Int64, ExtentValue<4>>>(); // 32
63 addCopier<SpecificType<Int64, ExtentValue<5>>>(); // 40
64 addCopier<SpecificType<Int64, ExtentValue<6>>>(); // 48
65 addCopier<SpecificType<Int64, ExtentValue<7>>>(); // 56
66 addCopier<SpecificType<Int64, ExtentValue<8>>>(); // 64
67 addCopier<SpecificType<Int64, ExtentValue<9>>>(); // 72
68 }
69};
70
71namespace
72{
73 // Copieur spécifique lorsqu'aucun runtime accélérateur n'est initialisé
74 HostSpecificMemoryCopyList global_host_copy_list;
75} // namespace
76
77/*---------------------------------------------------------------------------*/
78/*---------------------------------------------------------------------------*/
79
80void GlobalMemoryCopyList::
81setAcceleratorInstance(ISpecificMemoryCopyList* ptr)
82{
83 if (!default_global_copy_list) {
84 default_global_copy_list = ptr;
85 }
86 accelerator_global_copy_list = ptr;
87}
88
89/*---------------------------------------------------------------------------*/
90/*---------------------------------------------------------------------------*/
91
92ISpecificMemoryCopyList* GlobalMemoryCopyList::
93getDefault(const RunQueue* queue)
94{
95 if (queue && !default_global_copy_list)
96 ARCCORE_FATAL("No instance of copier is available for RunQueue");
97 if (default_global_copy_list && queue)
98 return default_global_copy_list;
99 return &global_host_copy_list;
100}
101
102/*---------------------------------------------------------------------------*/
103/*---------------------------------------------------------------------------*/
104
105} // namespace Arcane::impl
106
107/*---------------------------------------------------------------------------*/
108/*---------------------------------------------------------------------------*/
#define ARCCORE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Informations pour une dimension fixe connue à la compilation.