17#include <hip/hip_runtime.h>
19#include "arcane/utils/PlatformUtils.h"
20#include "arcane/utils/NotSupportedException.h"
21#include "arcane/utils/Real3.h"
22#include "arcane/Item.h"
23#include "arcane/MathUtils.h"
25#include "arcane/accelerator/hip/HipAccelerator.h"
26#include "arcane/accelerator/Runner.h"
27#include "arcane/accelerator/RunQueue.h"
29#include "arcane/accelerator/NumArray.h"
46 using reference_type = value_type&;
49 ARCCORE_HOST_DEVICE
Privatizer(
const T& o) : priv{o} {}
50 ARCCORE_HOST_DEVICE reference_type get_priv() {
return priv; }
54ARCCORE_HOST_DEVICE
auto thread_privatize(
const T& item) ->
Privatizer<T>
59__global__ void MyVecAdd(
double* a,
double*
b,
double* out)
70 Int64 size = a.size();
94 Int64 vsize = a.size();
95 for(
Int64 i = 0; i<vsize; ++i ){
104 Int32 vsize =
static_cast<Int32>(a.extent0());
105 for(
Int32 i = 0; i<vsize; ++i ){
113void MyVecLambda(
int size,
F func)
154 constexpr int vsize = 2000;
155 std::vector<double> a(vsize);
156 std::vector<double>
b(vsize);
157 std::vector<double> out(vsize);
158 for(
size_t i = 0; i<vsize; ++i ){
164 double*
d_a =
nullptr;
166 double*
d_b =
nullptr;
168 double*
d_out =
nullptr;
179 for(
size_t i=0; i<10; ++i )
180 std::cout <<
"V=" << out[i] <<
"\n";
188 constexpr int vsize = 2000;
190 double*
d_a =
nullptr;
192 double*
d_b =
nullptr;
194 double*
d_out =
nullptr;
201 for(
size_t i = 0; i<vsize; ++i ){
223 for(
size_t i=0; i<10; ++i )
224 std::cout <<
"V=" <<
d_out[i] <<
"\n";
235 std::cout <<
"TEST_HIP_3\n";
236 constexpr int vsize = 2000;
240 ARCANE_FATAL(
"platform::getAcceleratorHostMemoryAllocator() is null");
246 for(
size_t i = 0; i<vsize; ++i ){
260 for(
size_t i=0; i<10; ++i )
261 std::cout <<
"V=" <<
d_out[i] <<
"\n";
283 for(
size_t i=0; i<10; ++i )
284 std::cout <<
"V2=" <<
d_out[i] <<
"\n";
293 auto func = [=] ARCCORE_HOST_DEVICE (
int i)
302 for(
size_t i=0; i<10; ++i )
303 std::cout <<
"V3=" <<
d_out[i] <<
"\n";
308 for(
int i=0; i<vsize; ++i )
310 for(
size_t i=0; i<10; ++i )
311 std::cout <<
"V4=" <<
d_out[i] <<
"\n";
318 for(
Integer i=0; i<vsize; ++i ){
329 auto func2 = [=] ARCCORE_HOST_DEVICE (
int i) {
337 std::cout <<
"TEST WITH REAL3\n";
347int arcaneTestHipNumArray()
349 std::cout <<
"TEST_HIP_NUM_ARRAY\n";
350 constexpr int vsize = 2000;
354 ARCANE_FATAL(
"platform::getAcceleratorHostMemoryAllocator() is null");
362 for(
int i = 0; i<vsize; ++i ){
376 for(
int i=0; i<10; ++i )
377 std::cout <<
"V=" <<
d_out(i) <<
"\n";
399 for(
int i=0; i<10; ++i )
400 std::cout <<
"V2=" <<
d_out(i) <<
"\n";
409 auto func = [=] ARCCORE_HOST_DEVICE (
int i)
418 for(
int i=0; i<10; ++i )
419 std::cout <<
"V3=" <<
d_out(i) <<
"\n";
424 for(
int i=0; i<vsize; ++i )
426 for(
int i=0; i<10; ++i )
427 std::cout <<
"V4=" <<
d_out(i) <<
"\n";
434 for(
Integer i=0; i<vsize; ++i ){
450 auto func2 = [=] ARCCORE_HOST_DEVICE (
int i) {
460 std::cout <<
"TEST WITH REAL3\n";
476 std::cout <<
"TestReduction vsize=" << vsize <<
"\n";
481 for(
Integer i=0; i<vsize; ++i ){
482 int a = 5 + ((i+2) % 43);
513 std::cout <<
"SumReducer name=" << name <<
" v_int=" <<
sum_int_value
518 std::cout <<
"MaxReducer name=" << name <<
" v_int=" <<
max_int_value
523 std::cout <<
"MinReducer name=" << name <<
" v_int=" <<
min_int_value
532int arcaneTestHipReduction()
538 runner_hip.setDeviceReducePolicy(ax::eDeviceReducePolicy::Grid);
543 for(
int i=0; i<4; ++i ){
545 arcaneTestHipReductionX(vsize,
queue1,
"Sequential");
546 arcaneTestHipReductionX(vsize,
queue2,
"Thread");
547 arcaneTestHipReductionX(vsize,
queue3,
"HIP");
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Types et fonctions pour gérer les synchronisations sur les accélérateurs.
Types et macros pour gérer les boucles sur les accélérateurs.
#define RUNCOMMAND_LOOP1(iter_name, x1,...)
Boucle sur accélérateur avec arguments supplémentaires pour les réductions.
Gestion d'une commande sur accélérateur.
File d'exécution pour un accélérateur.
Gestionnaire d'exécution pour accélérateur.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Classe gérant un vecteur de réel de dimension 3.
Interface d'un allocateur pour la mémoire.
Chaîne de caractères unicode.
Espace de nom pour l'utilisation des accélérateurs.
RunCommand makeCommand(const RunQueue &run_queue)
Créé une commande associée à la file run_queue.
RunQueue makeQueue(const Runner &runner)
Créé une file associée à runner.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Espace de nom de Arccore.
double Real
Type représentant un réel.
Int32 Integer
Type représentant un entier.