8#include <gtest/gtest.h>
10#include "arcane/accelerator/core/Runner.h"
11#include "arcane/accelerator/core/RunQueue.h"
12#include "arcane/accelerator/Reduce.h"
13#include "arcane/accelerator/RunCommandLoop.h"
18extern "C++" void arcaneRegisterDefaultAcceleratorRuntime();
28 arcaneRegisterDefaultAcceleratorRuntime();
32 return arcaneGetDefaultExecutionPolicy();
38 std::cout <<
"DO_REDUCE_1\n";
39 Runner runner(_defaultExecutionPolicy());
48 reducer_sum.combine(i + 1);
50 Int64 computed_sum = reducer_sum.reducedValue();
51 std::cout <<
"NB_ITER=" << nb_iter <<
"\n";
52 std::cout <<
"VALUE sum=" << computed_sum
54 Int64 expected_sum = (nb_iter * (nb_iter + 1)) / 2;
55 std::cout <<
"VALUE sum=" << computed_sum
56 <<
" expected=" << expected_sum
58 ASSERT_EQ(computed_sum, expected_sum);
64 std::cout <<
"DO_REDUCE_2\n";
65 Runner runner(_defaultExecutionPolicy());
73 command << ::Arcane::Accelerator::Impl::makeExtendedArrayBoundLoop(Arcane::SimpleForLoopRanges<1,Int32>(nb_iter),
74 reducer_sum, reducer_max, reducer_min)
78 reducer_sum.combine(i + 1);
79 reducer_min.combine(i + 5);
80 reducer_max.combine(i - 5);
82 Int64 computed_sum = reducer_sum.reducedValue();
83 Int64 computed_min = reducer_min.reducedValue();
84 Int64 computed_max = reducer_max.reducedValue();
85 std::cout <<
"VALUE sum=" << computed_sum
86 <<
" min=" << computed_min
87 <<
" max=" << computed_max
90 Int64 expected_sum = (nb_iter * (nb_iter + 1)) / 2;
92 std::cout <<
"VALUE sum=" << computed_sum
93 <<
" expected=" << expected_sum
95 std::cout <<
"MIN/MAX VALUE min=" << computed_min
96 <<
" max=" << computed_max
99 ASSERT_EQ(computed_sum, expected_sum);
100 ASSERT_EQ(computed_min, 5);
101 ASSERT_EQ(computed_max, (nb_iter - 6));
105TEST(ArcaneAccelerator, Reduce)
109 bool is_copyable = std::is_trivially_copyable_v<ReducerSum2<Int64>>;
110 std::cout <<
"IS_REDUCE_COPYABLE=" << is_copyable <<
"\n";
#define RUNCOMMAND_LOOP1(iter_name, x1,...)
1D loop on accelerator with additional arguments.
Class to perform a 'max' reduction.
Class to perform a 'min' reduction.
Class to perform a 'sum' reduction.
Management of an accelerator command.
Execution queue for an accelerator.
Execution manager for accelerator.
Namespace for accelerator usage.
RunCommand makeCommand(const RunQueue &run_queue)
Creates a command associated with the queue run_queue.
RunQueue makeQueue(const Runner &runner)
Creates a queue associated with runner.
eExecutionPolicy
Execution policy for a Runner.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --