diff --git a/master/auxiliary_2norm_2api_8h_source.html b/master/auxiliary_2norm_2api_8h_source.html index d44e33fc48..a17aac42cc 100644 --- a/master/auxiliary_2norm_2api_8h_source.html +++ b/master/auxiliary_2norm_2api_8h_source.html @@ -92,39 +92,41 @@
9//
10#pragma once
11
-
12#include <dlaf/communication/communicator_grid.h>
-
13#include <dlaf/matrix/matrix.h>
-
14#include <dlaf/types.h>
-
15
-
16namespace dlaf::auxiliary::internal {
+
12#include <pika/execution.hpp>
+
13
+
14#include <dlaf/communication/communicator_grid.h>
+
15#include <dlaf/matrix/matrix.h>
+
16#include <dlaf/types.h>
17
-
18template <Backend backend, Device device, class T>
-
19struct Norm {};
-
20
-
21template <class T>
-
-
22struct Norm<Backend::MC, Device::CPU, T> {
-
23 static dlaf::BaseType<T> max_L(comm::CommunicatorGrid& comm_grid, comm::Index2D rank,
-
24 Matrix<const T, Device::CPU>& matrix);
-
25
-
26 static dlaf::BaseType<T> max_G(comm::CommunicatorGrid& comm_grid, comm::Index2D rank,
-
27 Matrix<const T, Device::CPU>& matrix);
-
28};
+
18namespace dlaf::auxiliary::internal {
+
19
+
20template <Backend backend, Device device, class T>
+
21struct Norm {};
+
22
+
23template <class T>
+
+
24struct Norm<Backend::MC, Device::CPU, T> {
+
25 static pika::execution::experimental::unique_any_sender<dlaf::BaseType<T>> max_L(
+
26 comm::CommunicatorGrid& comm_grid, comm::Index2D rank, Matrix<const T, Device::CPU>& matrix);
+
27
+
28 static pika::execution::experimental::unique_any_sender<dlaf::BaseType<T>> max_G(
+
29 comm::CommunicatorGrid& comm_grid, comm::Index2D rank, Matrix<const T, Device::CPU>& matrix);
+
30};
-
29
-
30// ETI
-
31#define DLAF_NORM_ETI(KWORD, DATATYPE) KWORD template struct Norm<Backend::MC, Device::CPU, DATATYPE>;
-
32
-
33DLAF_NORM_ETI(extern, float)
-
34DLAF_NORM_ETI(extern, double)
-
35DLAF_NORM_ETI(extern, std::complex<float>)
-
36DLAF_NORM_ETI(extern, std::complex<double>)
-
37}
+
31
+
32// ETI
+
33#define DLAF_NORM_ETI(KWORD, DATATYPE) KWORD template struct Norm<Backend::MC, Device::CPU, DATATYPE>;
+
34
+
35DLAF_NORM_ETI(extern, float)
+
36DLAF_NORM_ETI(extern, double)
+
37DLAF_NORM_ETI(extern, std::complex<float>)
+
38DLAF_NORM_ETI(extern, std::complex<double>)
+
39}
Definition communicator_grid.h:37
-
Definition api.h:19
+
Definition api.h:21
diff --git a/master/auxiliary_2norm_2mc_8h_source.html b/master/auxiliary_2norm_2mc_8h_source.html index 9cb1e010d2..1176b6a80c 100644 --- a/master/auxiliary_2norm_2mc_8h_source.html +++ b/master/auxiliary_2norm_2mc_8h_source.html @@ -98,149 +98,169 @@
15#include <dlaf/auxiliary/norm/api.h>
16#include <dlaf/common/range2d.h>
17#include <dlaf/common/vector.h>
-
18#include <dlaf/communication/sync/reduce.h>
-
19#include <dlaf/lapack/tile.h>
-
20#include <dlaf/matrix/distribution.h>
-
21#include <dlaf/types.h>
-
22#include <dlaf/util_matrix.h>
-
23
-
24namespace dlaf::auxiliary::internal {
+
18#include <dlaf/communication/kernels/reduce.h>
+
19#include <dlaf/communication/sync/reduce.h>
+
20#include <dlaf/lapack/tile.h>
+
21#include <dlaf/matrix/distribution.h>
+
22#include <dlaf/sender/transform_mpi.h>
+
23#include <dlaf/types.h>
+
24#include <dlaf/util_matrix.h>
25
-
26// Compute max norm of the lower triangular part of the distributed matrix
-
27// https://en.wikipedia.org/wiki/Matrix_norm#Max_norm
-
28//
-
29// It just addresses tiles with elements belonging to the lower triangular part of the matrix
-
30//
-
31// Thanks to the nature of the max norm, it is valid for:
-
32// - sy/he lower
-
33// - tr lower non-unit
+
26namespace dlaf::auxiliary::internal {
+
27
+
28template <class T>
+
29T max_element(std::vector<T>&& values) {
+
30 DLAF_ASSERT(!values.empty(), "");
+
31 return *std::max_element(values.begin(), values.end());
+
32}
+
33
34template <class T>
-
35dlaf::BaseType<T> Norm<Backend::MC, Device::CPU, T>::max_L(comm::CommunicatorGrid& comm_grid,
-
36 comm::Index2D rank,
-
37 Matrix<const T, Device::CPU>& matrix) {
-
38 using namespace dlaf::matrix;
-
39 namespace ex = pika::execution::experimental;
-
40 using pika::this_thread::experimental::sync_wait;
-
41
-
42 using dlaf::common::make_data;
-
43 using dlaf::common::internal::vector;
-
44
-
45 using dlaf::tile::internal::lange;
-
46 using dlaf::tile::internal::lantr;
-
47
-
48 using NormT = dlaf::BaseType<T>;
-
49
-
50 const auto& distribution = matrix.distribution();
-
51
-
52 DLAF_ASSERT(square_size(matrix), matrix);
-
53 DLAF_ASSERT(square_blocksize(matrix), matrix);
-
54
-
55 vector<ex::unique_any_sender<NormT>> tiles_max;
-
56 tiles_max.reserve(distribution.localNrTiles().rows() * distribution.localNrTiles().cols());
-
57
-
58 // for each local tile in the (global) lower triangular matrix, create a task that finds the max element in the tile
-
59 for (auto tile_wrt_local : iterate_range2d(distribution.localNrTiles())) {
-
60 auto tile_wrt_global = distribution.globalTileIndex(tile_wrt_local);
-
61
-
62 if (tile_wrt_global.row() < tile_wrt_global.col())
-
63 continue;
-
64
-
65 bool is_diag = tile_wrt_global.row() == tile_wrt_global.col();
-
66 auto norm_max_f = [is_diag](const matrix::Tile<const T, Device::CPU>& tile) noexcept -> NormT {
-
67 if (is_diag)
-
68 return lantr(lapack::Norm::Max, blas::Uplo::Lower, blas::Diag::NonUnit, tile);
-
69 else
-
70 return lange(lapack::Norm::Max, tile);
-
71 };
-
72 auto current_tile_max =
-
73 matrix.read(tile_wrt_local) |
-
74 dlaf::internal::transform(dlaf::internal::Policy<Backend::MC>(), std::move(norm_max_f));
-
75
-
76 tiles_max.push_back(std::move(current_tile_max));
-
77 }
-
78
-
79 // then it is necessary to reduce max values from all ranks into a single max value for the matrix
-
80
-
81 auto max_element = [](std::vector<NormT>&& values) {
-
82 DLAF_ASSERT(!values.empty(), "");
-
83 return *std::max_element(values.begin(), values.end());
-
84 };
-
85 NormT local_max_value =
-
86 tiles_max.empty() ? NormT{0}
-
87 : sync_wait(ex::when_all_vector(std::move(tiles_max)) |
-
88 dlaf::internal::transform(dlaf::internal::Policy<Backend::MC>(),
-
89 std::move(max_element)));
-
90 NormT max_value;
-
91 dlaf::comm::sync::reduce(comm_grid.rankFullCommunicator(rank), comm_grid.fullCommunicator(), MPI_MAX,
-
92 make_data(&local_max_value, 1), make_data(&max_value, 1));
-
93
-
94 return max_value;
-
95}
-
96
-
97template <class T>
-
98dlaf::BaseType<T> Norm<Backend::MC, Device::CPU, T>::max_G(comm::CommunicatorGrid& comm_grid,
-
99 comm::Index2D rank,
-
100 Matrix<const T, Device::CPU>& matrix) {
-
101 using namespace dlaf::matrix;
-
102 namespace ex = pika::execution::experimental;
-
103 using pika::this_thread::experimental::sync_wait;
-
104
-
105 using dlaf::common::make_data;
-
106 using dlaf::common::internal::vector;
-
107
-
108 using dlaf::tile::internal::lange;
-
109 using dlaf::tile::internal::lantr;
+
35pika::execution::experimental::unique_any_sender<T> reduce_in_place(
+
36 pika::execution::experimental::unique_any_sender<dlaf::comm::CommunicatorPipelineExclusiveWrapper>
+
37 pcomm,
+
38 comm::IndexT_MPI rank, MPI_Op reduce_op, pika::execution::experimental::unique_any_sender<T> value) {
+
39 namespace ex = pika::execution::experimental;
+
40
+
41 return std::move(value) | ex::let_value([pcomm = std::move(pcomm), rank, reduce_op](T& local) mutable {
+
42 using dlaf::comm::internal::transformMPI;
+
43 return std::move(pcomm) |
+
44 transformMPI([rank, reduce_op, &local](const dlaf::comm::Communicator& comm,
+
45 MPI_Request* req) mutable {
+
46 const bool is_root_rank = comm.rank() == rank;
+
47 void* in = is_root_rank ? MPI_IN_PLACE : &local;
+
48 void* out = is_root_rank ? &local : nullptr;
+
49 DLAF_MPI_CHECK_ERROR(MPI_Ireduce(in, out, 1, dlaf::comm::mpi_datatype<T>::type,
+
50 reduce_op, rank, comm, req));
+
51 }) |
+
52 ex::then([&local]() -> T { return local; });
+
53 });
+
54}
+
55
+
56// Compute max norm of the lower triangular part of the distributed matrix
+
57// https://en.wikipedia.org/wiki/Matrix_norm#Max_norm
+
58//
+
59// It just addresses tiles with elements belonging to the lower triangular part of the matrix
+
60//
+
61// Thanks to the nature of the max norm, it is valid for:
+
62// - sy/he lower
+
63// - tr lower non-unit
+
64template <class T>
+
65pika::execution::experimental::unique_any_sender<dlaf::BaseType<T>> Norm<
+
66 Backend::MC, Device::CPU, T>::max_L(comm::CommunicatorGrid& comm_grid, comm::Index2D rank,
+
67 Matrix<const T, Device::CPU>& matrix) {
+
68 using namespace dlaf::matrix;
+
69 namespace ex = pika::execution::experimental;
+
70
+
71 using dlaf::common::make_data;
+
72 using dlaf::common::internal::vector;
+
73 using pika::execution::thread_stacksize;
+
74
+
75 using dlaf::tile::internal::lange;
+
76 using dlaf::tile::internal::lantr;
+
77
+
78 using NormT = dlaf::BaseType<T>;
+
79
+
80 const auto& distribution = matrix.distribution();
+
81
+
82 DLAF_ASSERT(square_size(matrix), matrix);
+
83 DLAF_ASSERT(square_blocksize(matrix), matrix);
+
84
+
85 vector<ex::unique_any_sender<NormT>> tiles_max;
+
86 tiles_max.reserve(distribution.localNrTiles().rows() * distribution.localNrTiles().cols());
+
87
+
88 // for each local tile in the (global) lower triangular matrix, create a task that finds the max element in the tile
+
89 for (auto tile_wrt_local : iterate_range2d(distribution.localNrTiles())) {
+
90 auto tile_wrt_global = distribution.globalTileIndex(tile_wrt_local);
+
91
+
92 if (tile_wrt_global.row() < tile_wrt_global.col())
+
93 continue;
+
94
+
95 bool is_diag = tile_wrt_global.row() == tile_wrt_global.col();
+
96 auto norm_max_f = [is_diag](const matrix::Tile<const T, Device::CPU>& tile) noexcept -> NormT {
+
97 if (is_diag)
+
98 return lantr(lapack::Norm::Max, blas::Uplo::Lower, blas::Diag::NonUnit, tile);
+
99 else
+
100 return lange(lapack::Norm::Max, tile);
+
101 };
+
102 auto current_tile_max =
+
103 matrix.read(tile_wrt_local) |
+
104 dlaf::internal::transform(dlaf::internal::Policy<Backend::MC>(), std::move(norm_max_f));
+
105
+
106 tiles_max.push_back(std::move(current_tile_max));
+
107 }
+
108
+
109 // then it is necessary to reduce max values from all ranks into a single max value for the matrix
110
-
111 using NormT = dlaf::BaseType<T>;
-
112
-
113 const auto& distribution = matrix.distribution();
-
114
-
115 vector<ex::unique_any_sender<NormT>> tiles_max;
-
116 tiles_max.reserve(distribution.localNrTiles().rows() * distribution.localNrTiles().cols());
+
111 ex::unique_any_sender<NormT> local_max_value = ex::just(NormT{0});
+
112 if (!tiles_max.empty())
+
113 local_max_value =
+
114 ex::when_all_vector(std::move(tiles_max)) |
+
115 dlaf::internal::transform(dlaf::internal::Policy<Backend::MC>(thread_stacksize::nostack),
+
116 max_element<NormT>);
117
-
118 for (auto tile_wrt_local : iterate_range2d(distribution.localNrTiles())) {
-
119 auto norm_max_f = [](const matrix::Tile<const T, Device::CPU>& tile) noexcept -> NormT {
-
120 return lange(lapack::Norm::Max, tile);
-
121 };
-
122 auto current_tile_max =
-
123 matrix.read(tile_wrt_local) |
-
124 dlaf::internal::transform(dlaf::internal::Policy<Backend::MC>(), std::move(norm_max_f));
-
125
-
126 tiles_max.push_back(std::move(current_tile_max));
-
127 }
+
118 return reduce_in_place(comm_grid.full_communicator_pipeline().exclusive(),
+
119 comm_grid.rankFullCommunicator(rank), MPI_MAX, std::move(local_max_value));
+
120}
+
121
+
122template <class T>
+
123pika::execution::experimental::unique_any_sender<dlaf::BaseType<T>> Norm<
+
124 Backend::MC, Device::CPU, T>::max_G(comm::CommunicatorGrid& comm_grid, comm::Index2D rank,
+
125 Matrix<const T, Device::CPU>& matrix) {
+
126 using namespace dlaf::matrix;
+
127 namespace ex = pika::execution::experimental;
128
-
129 // then it is necessary to reduce max values from all ranks into a single max value for the matrix
-
130
-
131 auto max_element = [](std::vector<NormT>&& values) {
-
132 DLAF_ASSERT(!values.empty(), "");
-
133 return *std::max_element(values.begin(), values.end());
-
134 };
-
135 NormT local_max_value =
-
136 tiles_max.empty() ? NormT{0}
-
137 : sync_wait(ex::when_all_vector(std::move(tiles_max)) |
-
138 dlaf::internal::transform(dlaf::internal::Policy<Backend::MC>(),
-
139 std::move(max_element)));
-
140 NormT max_value;
-
141 dlaf::comm::sync::reduce(comm_grid.rankFullCommunicator(rank), comm_grid.fullCommunicator(), MPI_MAX,
-
142 make_data(&local_max_value, 1), make_data(&max_value, 1));
-
143
-
144 return max_value;
-
145}
-
146}
+
129 using dlaf::common::make_data;
+
130 using dlaf::common::internal::vector;
+
131 using pika::execution::thread_stacksize;
+
132
+
133 using dlaf::tile::internal::lange;
+
134 using dlaf::tile::internal::lantr;
+
135
+
136 using NormT = dlaf::BaseType<T>;
+
137
+
138 const auto& distribution = matrix.distribution();
+
139
+
140 vector<ex::unique_any_sender<NormT>> tiles_max;
+
141 tiles_max.reserve(distribution.localNrTiles().rows() * distribution.localNrTiles().cols());
+
142
+
143 for (auto tile_wrt_local : iterate_range2d(distribution.localNrTiles())) {
+
144 auto current_tile_max =
+
145 dlaf::internal::whenAllLift(lapack::Norm::Max, matrix.read(tile_wrt_local)) |
+
146 dlaf::tile::lange(dlaf::internal::Policy<Backend::MC>(thread_stacksize::nostack));
+
147
+
148 tiles_max.push_back(std::move(current_tile_max));
+
149 }
+
150
+
151 // then it is necessary to reduce max values from all ranks into a single max value for the matrix
+
152
+
153 ex::unique_any_sender<NormT> local_max_value = ex::just(NormT{0});
+
154 if (!tiles_max.empty())
+
155 local_max_value =
+
156 ex::when_all_vector(std::move(tiles_max)) |
+
157 dlaf::internal::transform(dlaf::internal::Policy<Backend::MC>(thread_stacksize::nostack),
+
158 max_element<NormT>);
+
159
+
160 return reduce_in_place(comm_grid.full_communicator_pipeline().exclusive(),
+
161 comm_grid.rankFullCommunicator(rank), MPI_MAX, std::move(local_max_value));
+
162}
+
163}
dlaf::comm::CommunicatorGrid
Definition communicator_grid.h:37
+
dlaf::comm::Communicator
Definition communicator.h:38
+
dlaf::comm::Communicator::rank
IndexT_MPI rank() const noexcept
Return the rank of the current process in the Communicator.
dlaf::common::Index2D< IndexT_MPI, TAG_MPI >
dlaf::internal::Policy
Definition policy.h:24
dlaf::matrix::Matrix
Definition matrix.h:61
dlaf::common::make_data
auto make_data(Data &&data) noexcept
Definition data.h:78
distribution.h
+
reduce.h
tile.h
dlaf::tile::lantr
dlaf::BaseType< T > lantr(const dlaf::internal::Policy< B > &p, const lapack::Norm norm, const blas::Uplo uplo, const blas::Diag diag, const Tile< T, D > &a)
dlaf::tile::lange
dlaf::BaseType< T > lange(const dlaf::internal::Policy< B > &p, const lapack::Norm norm, const Tile< T, D > &a)
range2d.h
dlaf::common::iterate_range2d
IterableRange2D< IndexT, Tag > iterate_range2d(Index2D< IndexT, Tag > begin_idx, Index2D< IndexT, Tag > end_idx) noexcept
Definition range2d.h:247
+
dlaf::comm::mpi_datatype
Mapper between language types and basic MPI_Datatype.
Definition datatypes.h:24
dlaf::common::internal::vector
Definition vector.h:27
reduce.h
-
dlaf::comm::sync::reduce
void reduce(const IndexT_MPI rank_root, Communicator &communicator, MPI_Op reduce_op, const DataIn input, const DataOut output)
Definition reduce.h:135
types.h
util_matrix.h
dlaf::matrix::square_blocksize
bool square_blocksize(const MatrixLike &m) noexcept
Returns true if the matrix block size is square.
Definition util_matrix.h:48
diff --git a/master/norm_8h.html b/master/norm_8h.html index e69da444f9..09089fd039 100644 --- a/master/norm_8h.html +++ b/master/norm_8h.html @@ -92,13 +92,13 @@ - - - + + +

Functions

template<Backend backend, Device device, class T >
dlaf::BaseType< T > dlaf::auxiliary::max_norm (comm::CommunicatorGrid &grid, comm::Index2D rank, blas::Uplo uplo, Matrix< const T, device > &A)
 
template<Backend backend, Device device, class T >
pika::execution::experimental::unique_any_sender< dlaf::BaseType< T > > dlaf::auxiliary::max_norm (comm::CommunicatorGrid &grid, comm::Index2D rank, blas::Uplo uplo, Matrix< const T, device > &A)
 

Function Documentation

- -

◆ max_norm()

+ +

◆ max_norm()

@@ -106,7 +106,7 @@

- dlaf::BaseType< T > dlaf::auxiliary::max_norm + pika::execution::experimental::unique_any_sender< dlaf::BaseType< T > > dlaf::auxiliary::max_norm ( comm::CommunicatorGridgrid, diff --git a/master/norm_8h_source.html b/master/norm_8h_source.html index 907fa77faf..edfa2b84a5 100644 --- a/master/norm_8h_source.html +++ b/master/norm_8h_source.html @@ -107,8 +107,8 @@
25
35template <Backend backend, Device device, class T>
-
36dlaf::BaseType<T> max_norm(comm::CommunicatorGrid& grid, comm::Index2D rank, blas::Uplo uplo,
-
37 Matrix<const T, device>& A) {
+
36pika::execution::experimental::unique_any_sender<dlaf::BaseType<T>> max_norm(
+
37 comm::CommunicatorGrid& grid, comm::Index2D rank, blas::Uplo uplo, Matrix<const T, device>& A) {
38 using dlaf::matrix::equal_process_grid;
39 using dlaf::matrix::single_tile_per_block;
40
@@ -117,7 +117,7 @@
43
44 // LAPACK documentation specify that if any dimension is 0, the result is 0
45 if (A.size().isEmpty())
-
46 return {0};
+
46 return {pika::execution::experimental::just(0)};
47
48 switch (uplo) {
49 case blas::Uplo::Lower:
@@ -140,8 +140,8 @@ -
dlaf::BaseType< T > max_norm(comm::CommunicatorGrid &grid, comm::Index2D rank, blas::Uplo uplo, Matrix< const T, device > &A)
Definition norm.h:36
- +
pika::execution::experimental::unique_any_sender< dlaf::BaseType< T > > max_norm(comm::CommunicatorGrid &grid, comm::Index2D rank, blas::Uplo uplo, Matrix< const T, device > &A)
Definition norm.h:36
+

diff --git a/master/search/all_c.js b/master/search/all_c.js index b9ff89e5fc..0d8ce73439 100644 --- a/master/search/all_c.js +++ b/master/search/all_c.js @@ -25,7 +25,7 @@ var searchData= ['matrixmirror_3c_20t_2c_20sourcetarget_2c_20sourcetarget_20_3e_22',['MatrixMirror< T, SourceTarget, SourceTarget >',['../classdlaf_1_1matrix_1_1_matrix_mirror_3_01_t_00_01_source_target_00_01_source_target_01_4.html',1,'dlaf::matrix']]], ['matrixref_23',['matrixref',['../classdlaf_1_1matrix_1_1internal_1_1_matrix_ref.html',1,'dlaf::matrix::internal::MatrixRef< T, D >'],['../classdlaf_1_1matrix_1_1internal_1_1_matrix_ref.html#ae705a699f73c9656c190e561d2575629',1,'dlaf::matrix::internal::MatrixRef::MatrixRef(Matrix< T, D > &mat)'],['../classdlaf_1_1matrix_1_1internal_1_1_matrix_ref.html#a036cd13b6ff871d083213870daabe028',1,'dlaf::matrix::internal::MatrixRef::MatrixRef(Matrix< T, D > &mat, const SubMatrixSpec &spec)'],['../classdlaf_1_1matrix_1_1internal_1_1_matrix_ref_3_01const_01_t_00_01_d_01_4.html#ab833a9dc61d24079fc39223085bac663',1,'dlaf::matrix::internal::MatrixRef< const T, D >::MatrixRef(Matrix< const T, D > &mat)'],['../classdlaf_1_1matrix_1_1internal_1_1_matrix_ref_3_01const_01_t_00_01_d_01_4.html#a446ac09c4dff817804b8baa7fa76d31d',1,'dlaf::matrix::internal::MatrixRef< const T, D >::MatrixRef(Matrix< const T, D > &mat, const SubMatrixSpec &spec)']]], ['matrixref_3c_20const_20t_2c_20d_20_3e_24',['MatrixRef< const T, D >',['../classdlaf_1_1matrix_1_1internal_1_1_matrix_ref_3_01const_01_t_00_01_d_01_4.html',1,'dlaf::matrix::internal']]], - ['max_5fnorm_25',['max_norm',['../norm_8h.html#a4e6915a6cfbb65cda9a982fd0c90bc15',1,'dlaf::auxiliary']]], + ['max_5fnorm_25',['max_norm',['../norm_8h.html#aabd364d7fc5ffff9005e7bbcf3712e14',1,'dlaf::auxiliary']]], ['mb_26',['mb',['../struct_d_l_a_f__descriptor.html#ad57b91c440fcdc67cf2ee27c99a1409f',1,'DLAF_descriptor']]], ['memory_5fchunk_2eh_27',['memory_chunk.h',['../memory__chunk_8h.html',1,'']]], ['memory_5fview_2eh_28',['memory_view.h',['../memory__view_8h.html',1,'']]], diff --git a/master/search/functions_a.js b/master/search/functions_a.js index 062efdff4c..deafa658a1 100644 --- a/master/search/functions_a.js +++ b/master/search/functions_a.js @@ -8,7 +8,7 @@ var searchData= ['matrix_5',['matrix',['../classdlaf_1_1matrix_1_1_matrix.html#abd117e7b0c37cd0bbdb1291cc18adff2',1,'dlaf::matrix::Matrix::Matrix(const GlobalElementSize &size, const TileElementSize &tile_size, const comm::CommunicatorGrid &comm)'],['../classdlaf_1_1matrix_1_1_matrix.html#a3fd2656c0cc54ae717fcb037093ffecb',1,'dlaf::matrix::Matrix::Matrix(const LocalElementSize &size, const TileElementSize &tile_size)'],['../classdlaf_1_1matrix_1_1_matrix.html#a73b38df3414aa5272abd3b6e87d67e37',1,'dlaf::matrix::Matrix::Matrix(Distribution distribution)'],['../classdlaf_1_1matrix_1_1_matrix.html#ab49caaa5197fc412e530421b201bdad8',1,'dlaf::matrix::Matrix::Matrix(Distribution distribution, const LayoutInfo &layout)'],['../classdlaf_1_1matrix_1_1_matrix.html#a51abfa191bef173e42471210cb1e0a2f',1,'dlaf::matrix::Matrix::Matrix(const LayoutInfo &layout, ElementType *ptr) noexcept'],['../classdlaf_1_1matrix_1_1_matrix.html#a5d2827ca2dbad4d6e6482e4c1e963472',1,'dlaf::matrix::Matrix::Matrix(Distribution distribution, const LayoutInfo &layout, ElementType *ptr) noexcept']]], ['matrixmirror_6',['matrixmirror',['../classdlaf_1_1matrix_1_1_matrix_mirror.html#a355ab06273bb75ba0fb40119829d2aa0',1,'dlaf::matrix::MatrixMirror::MatrixMirror()'],['../classdlaf_1_1matrix_1_1_matrix_mirror_3_01const_01_t_00_01_target_00_01_source_01_4.html#ac9dfb2578a5c94b8cf6bf0d5b3186979',1,'dlaf::matrix::MatrixMirror< const T, Target, Source >::MatrixMirror()'],['../classdlaf_1_1matrix_1_1_matrix_mirror_3_01_t_00_01_source_target_00_01_source_target_01_4.html#a66b7ac6e591f693cd7bb8119955055fc',1,'dlaf::matrix::MatrixMirror< T, SourceTarget, SourceTarget >::MatrixMirror()'],['../classdlaf_1_1matrix_1_1_matrix_mirror_3_01const_01_t_00_01_source_target_00_01_source_target_01_4.html#ab4b4d7a17b5f0ae45d301ef415f41b29',1,'dlaf::matrix::MatrixMirror< const T, SourceTarget, SourceTarget >::MatrixMirror()']]], ['matrixref_7',['matrixref',['../classdlaf_1_1matrix_1_1internal_1_1_matrix_ref_3_01const_01_t_00_01_d_01_4.html#a446ac09c4dff817804b8baa7fa76d31d',1,'dlaf::matrix::internal::MatrixRef< const T, D >::MatrixRef(Matrix< const T, D > &mat, const SubMatrixSpec &spec)'],['../classdlaf_1_1matrix_1_1internal_1_1_matrix_ref_3_01const_01_t_00_01_d_01_4.html#ab833a9dc61d24079fc39223085bac663',1,'dlaf::matrix::internal::MatrixRef< const T, D >::MatrixRef(Matrix< const T, D > &mat)'],['../classdlaf_1_1matrix_1_1internal_1_1_matrix_ref.html#a036cd13b6ff871d083213870daabe028',1,'dlaf::matrix::internal::MatrixRef::MatrixRef(Matrix< T, D > &mat, const SubMatrixSpec &spec)'],['../classdlaf_1_1matrix_1_1internal_1_1_matrix_ref.html#ae705a699f73c9656c190e561d2575629',1,'dlaf::matrix::internal::MatrixRef::MatrixRef(Matrix< T, D > &mat)']]], - ['max_5fnorm_8',['max_norm',['../norm_8h.html#a4e6915a6cfbb65cda9a982fd0c90bc15',1,'dlaf::auxiliary']]], + ['max_5fnorm_8',['max_norm',['../norm_8h.html#aabd364d7fc5ffff9005e7bbcf3712e14',1,'dlaf::auxiliary']]], ['memorychunk_9',['memorychunk',['../classdlaf_1_1memory_1_1_memory_chunk.html#ab7a334b89c214fe25ffde4bf0fd4e802',1,'dlaf::memory::MemoryChunk::MemoryChunk(MemoryChunk &&rhs) noexcept'],['../classdlaf_1_1memory_1_1_memory_chunk.html#a8855d0d0e0c35c83394ce82cd14ea36d',1,'dlaf::memory::MemoryChunk::MemoryChunk(T *ptr, SizeType size)'],['../classdlaf_1_1memory_1_1_memory_chunk.html#a53cffddd0ddfd2e1e0db839157a58913',1,'dlaf::memory::MemoryChunk::MemoryChunk(SizeType size)'],['../classdlaf_1_1memory_1_1_memory_chunk.html#a4059fde641a91f8cac05721fb54c749b',1,'dlaf::memory::MemoryChunk::MemoryChunk()']]], ['memoryview_10',['memoryview',['../classdlaf_1_1memory_1_1_memory_view.html#a0835f719277ae4f7b97c68d097a07071',1,'dlaf::memory::MemoryView::MemoryView(T *ptr, SizeType size)'],['../classdlaf_1_1memory_1_1_memory_view.html#a76c5e9d28626abb2991dd6ad1ce460c7',1,'dlaf::memory::MemoryView::MemoryView(const MemoryView &memory_view, SizeType offset, SizeType size)'],['../classdlaf_1_1memory_1_1_memory_view.html#a0650b61938741469c7583d671240619d',1,'dlaf::memory::MemoryView::MemoryView(SizeType size)'],['../classdlaf_1_1memory_1_1_memory_view.html#aa0752bb38aa279bd6260e2d440b8ca7d',1,'dlaf::memory::MemoryView::MemoryView()']]], ['message_11',['Message',['../classdlaf_1_1comm_1_1_message.html#aa0a15382490f3f628d14f734aeddf285',1,'dlaf::comm::Message']]], diff --git a/master/structdlaf_1_1auxiliary_1_1internal_1_1_norm_3_01_backend_1_1_m_c_00_01_device_1_1_c_p_u_00_01_t_01_4.html b/master/structdlaf_1_1auxiliary_1_1internal_1_1_norm_3_01_backend_1_1_m_c_00_01_device_1_1_c_p_u_00_01_t_01_4.html index 0695599833..9ee7e98092 100644 --- a/master/structdlaf_1_1auxiliary_1_1internal_1_1_norm_3_01_backend_1_1_m_c_00_01_device_1_1_c_p_u_00_01_t_01_4.html +++ b/master/structdlaf_1_1auxiliary_1_1internal_1_1_norm_3_01_backend_1_1_m_c_00_01_device_1_1_c_p_u_00_01_t_01_4.html @@ -82,12 +82,12 @@ - - - - + + + +

Static Public Member Functions

-static dlaf::BaseType< T > max_L (comm::CommunicatorGrid &comm_grid, comm::Index2D rank, Matrix< const T, Device::CPU > &matrix)
 
-static dlaf::BaseType< T > max_G (comm::CommunicatorGrid &comm_grid, comm::Index2D rank, Matrix< const T, Device::CPU > &matrix)
 
+static pika::execution::experimental::unique_any_sender< dlaf::BaseType< T > > max_L (comm::CommunicatorGrid &comm_grid, comm::Index2D rank, Matrix< const T, Device::CPU > &matrix)
 
+static pika::execution::experimental::unique_any_sender< dlaf::BaseType< T > > max_G (comm::CommunicatorGrid &comm_grid, comm::Index2D rank, Matrix< const T, Device::CPU > &matrix)
 

The documentation for this struct was generated from the following files: