14#include "arcane/accelerator/sycl/SyclAccelerator.h"
16#include "arcane/accelerator/core/Runner.h"
17#include "arcane/accelerator/core/RunQueue.h"
21#include "arcane/utils/NumArray.h"
31extern "C" int arcaneTestSycl1()
34 std::cout <<
"TEST1\n";
37 std::cout <<
"Device: " <<
q.get_device().get_info<sycl::info::device::name>() << std::endl;
39 int* data = sycl::malloc_shared<int>(N,
q);
41 for (
int i = 0; i < N; i++)
44 q.parallel_for(sycl::range<1>(N), [=](sycl::id<1> i) {
49 for (
int i = 0; i < N; i++)
50 std::cout << data[i] << std::endl;
60extern "C" int arcaneTestSycl2()
63 std::cout <<
"TEST 2\n";
69 for (
int i = 0; i < N; i++)
73 q.parallel_for(sycl::range<1>(N), [=](sycl::id<1> i) {
78 for (
int i = 0; i < N; i++)
79 std::cout << data[i] << std::endl;
88extern "C" int arcaneTestSycl3()
91 std::cout <<
"TEST 3\n";
99 for (
int i = 0; i < N; i++)
112 for (
int i = 0; i < N; i++)
113 std::cout << data[i] << std::endl;
121extern "C" int arcaneTestSycl4()
125 constexpr Int32 BLOCK_SIZE = 128;
129 const int N = BLOCK_SIZE *
NB_BLOCK;
130 std::cout <<
"TEST 4\n";
132 sycl::device device{ sycl::gpu_selector_v };
133 Int64 mcu = device.get_info<sycl::info::device::max_compute_units>();
134 Int64 mwg = device.get_info<sycl::info::device::max_work_group_size>();
135 std::cout <<
"DEVICE mcu=" <<
mcu <<
" mwg=" <<
mwg <<
"\n";
136 sycl::queue
q{ device };
145 for (
int i = 0; i < N; i++) {
152 q.single_task([=]() {
163 q.parallel_for(sycl::nd_range<1>(N, BLOCK_SIZE), [=](sycl::nd_item<1>
id) {
164 Int32 i =
static_cast<Int32>(
id.get_global_id());
166 const Int32 local_id =
static_cast<Int32>(
id.get_local_id(0));
179 id.barrier(sycl::access::fence_space::local_space);
181 Int32 vx = sycl::reduce_over_group(
id.
get_group(),v,sycl::plus<Int32>{});
190 sycl::atomic_ref<Int32, sycl::memory_order::relaxed, sycl::memory_scope::device> a(*
atomic_counter_ptr);
196 id.barrier(sycl::access::fence_space::local_space);
214 for (
int i = 0; i < N; i++) {
217 std::cout <<
"I=" << i <<
" global_id=" <<
data1(i, 0)
218 <<
" local_id=" <<
data1(i, 1)
219 <<
" group_id=" <<
data1(i, 2)
220 <<
" sub_group_local_id=" <<
data1(i, 3)
221 <<
" v=" <<
data1(i, 4)
229extern "C" void arcaneTestSycl5()
231 Runner runner(eExecutionPolicy::SYCL);
233 constexpr int N = 25;
237 for (
int i = 0; i < N; i++)
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.
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.
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.