12#ifndef ARCANE_ACCELERATOR_RUNCOMMANDLOCALMEMORY_H
13#define ARCANE_ACCELERATOR_RUNCOMMANDLOCALMEMORY_H
17#include "arcane/accelerator/AcceleratorGlobal.h"
19#include "arcane/accelerator/core/RunCommand.h"
24namespace Arcane::Accelerator::Impl
26#if defined(ARCANE_COMPILING_CUDA) || defined(ARCANE_COMPILING_HIP)
27inline __device__ std::byte* _getAcceleratorSharedMemory()
29 extern __shared__
Int64 shared_memory_ptr[];
30 return reinterpret_cast<std::byte*
>(shared_memory_ptr);
50class RunCommandLocalMemory
57 command._addSharedMemory(
static_cast<Int32>(
sizeof(T) * size));
62 return { m_ptr, m_size };
65#if defined(ARCANE_COMPILING_CUDA) || defined(ARCANE_COMPILING_HIP)
66 ARCCORE_DEVICE
void _internalExecWorkItemAtBegin(
Int32)
68 m_ptr =
reinterpret_cast<T*
>(Impl::_getAcceleratorSharedMemory());
70 ARCCORE_DEVICE
void _internalExecWorkItemAtEnd(
Int32){};
73#if defined(ARCANE_COMPILING_SYCL)
75 void _internalExecWorkItemAtBegin(sycl::nd_item<1>){}
76 void _internalExecWorkItemAtEnd(sycl::nd_item<1>) {}
79 void _internalReduceHost() {}
Gestion d'une commande sur accélérateur.
Vue d'un tableau d'éléments de type T.
Espace de nom pour l'utilisation des accélérateurs.
std::int64_t Int64
Type entier signé sur 64 bits.
std::int32_t Int32
Type entier signé sur 32 bits.