Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
PointerAttribute.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2022 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/* PointerAttribute.h (C) 2000-2023 */
9/* */
10/* Informations sur une adresse mémoire. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_ACCELERATOR_CORE_POINTERATTRIBUTE_H
13#define ARCANE_ACCELERATOR_CORE_POINTERATTRIBUTE_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/String.h"
18#include "arcane/accelerator/core/DeviceId.h"
19
20/*---------------------------------------------------------------------------*/
21/*---------------------------------------------------------------------------*/
22
23namespace Arcane::Accelerator
24{
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28/*!
29 * \brief Informations sur une adresse mémoire.
30 *
31 * Les informations de cette instance sont équivalentes à celles obtenues
32 * par l'appel à cudaPointerGetAttributes().
33 * Les informations ne sont valides que si isValid() est vrai.
34 */
35class ARCANE_ACCELERATOR_CORE_EXPORT PointerAttribute
36{
37 // Seule cette classe peut construire une instance
38 friend impl::IRunnerRuntime;
39
40 public:
41
42 PointerAttribute() = default;
43
44 public:
45
46 bool isValid() const { return m_is_valid; }
47 ePointerMemoryType memoryType() const { return m_memory_type; }
48 const void* originalPointer() const { return m_pointer; }
49 const void* hostPointer() const { return m_host_pointer; }
50 const void* devicePointer() const { return m_device_pointer; }
51 int device() const { return m_device; }
52 friend std::ostream& operator<<(std::ostream& o, const PointerAttribute& a);
53
54 private:
55
56 //! Constructeur indiquant qu'on n'a pas d'informations sur la zone mémoire
57 PointerAttribute(const void* pointer)
58 : m_pointer(pointer)
59 , m_is_valid(false)
60 {
61 }
62
63 PointerAttribute(ePointerMemoryType mem_type, int device, const void* pointer,
64 const void* device_pointer, const void* host_pointer)
65 : m_memory_type(mem_type)
66 , m_device(device)
67 , m_pointer(pointer)
68 , m_device_pointer(device_pointer)
69 , m_host_pointer(host_pointer)
70 , m_is_valid(true)
71 {}
72
73 private:
74
75 ePointerMemoryType m_memory_type = ePointerMemoryType::Unregistered;
76 int m_device = (-1);
77 const void* m_pointer = nullptr;
78 const void* m_device_pointer = nullptr;
79 const void* m_host_pointer = nullptr;
80 bool m_is_valid = false;
81};
82
83/*---------------------------------------------------------------------------*/
84/*---------------------------------------------------------------------------*/
85
86} // namespace Arcane::Accelerator
87
88/*---------------------------------------------------------------------------*/
89/*---------------------------------------------------------------------------*/
90
91#endif
Informations sur une adresse mémoire.
Espace de nom pour l'utilisation des accélérateurs.
ePointerMemoryType
Type de mémoire pour un pointeur.
std::ostream & operator<<(std::ostream &ostr, eItemKind item_kind)
Opérateur de sortie sur un flot.