Panzer
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
disc-fe
src
Panzer_HierarchicParallelism.cpp
Go to the documentation of this file.
1
// @HEADER
2
// ***********************************************************************
3
//
4
// Panzer: A partial differential equation assembly
5
// engine for strongly coupled complex multiphysics systems
6
// Copyright (2011) Sandia Corporation
7
//
8
// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
9
// the U.S. Government retains certain rights in this software.
10
//
11
// Redistribution and use in source and binary forms, with or without
12
// modification, are permitted provided that the following conditions are
13
// met:
14
//
15
// 1. Redistributions of source code must retain the above copyright
16
// notice, this list of conditions and the following disclaimer.
17
//
18
// 2. Redistributions in binary form must reproduce the above copyright
19
// notice, this list of conditions and the following disclaimer in the
20
// documentation and/or other materials provided with the distribution.
21
//
22
// 3. Neither the name of the Corporation nor the names of the
23
// contributors may be used to endorse or promote products derived from
24
// this software without specific prior written permission.
25
//
26
// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
27
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
30
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37
//
38
// Questions? Contact Roger P. Pawlowski (rppawlo@sandia.gov) and
39
// Eric C. Cyr (eccyr@sandia.gov)
40
// ***********************************************************************
41
// @HEADER
42
43
#include "
Panzer_HierarchicParallelism.hpp
"
44
45
namespace
panzer
{
46
47
HP::HP
() :
48
use_auto_team_size_
(true),
49
team_size_
(-1),
50
vector_size_
(1),
51
fad_vector_size_
(1),
52
use_shared_memory_
(true),
53
fad_use_shared_memory_
(false)
54
{
55
#if defined(SACADO_VIEW_CUDA_HIERARCHICAL_DFAD)
56
#if defined(KOKKOS_ENABLE_CUDA)
57
fad_vector_size_
= 32;
58
#endif
59
#endif
60
}
61
62
HP
&
HP::inst
()
63
{
64
static
HP
hp;
65
return
hp;
66
}
67
68
namespace
{
69
int
roundDownToPowerOfTwo(
int
in) {
70
int
out=1;
71
while
(in > 1) {
72
out *= 2;
73
in /= 2;
74
}
75
return
out;
76
}
77
}
78
void
HP::overrideSizes
(
const
int
& in_team_size,
79
const
int
& in_vector_size,
80
const
int
& in_fad_vector_size,
81
const
bool
force_override)
82
{
83
use_auto_team_size_
=
false
;
84
if
( force_override ) {
85
team_size_
=in_team_size;
86
vector_size_
=in_vector_size;
87
fad_vector_size_
=in_fad_vector_size;
88
return
;
89
}
90
91
Kokkos::TeamPolicy<PHX::Device> policy(1, Kokkos::AUTO);
92
auto
blank_functor = KOKKOS_LAMBDA (
const
Kokkos::TeamPolicy<PHX::exec_space>::member_type) {};
93
94
int
team_size_max = std::min(in_team_size, policy.team_size_max(blank_functor, Kokkos::ParallelForTag()));
95
team_size_
=roundDownToPowerOfTwo(team_size_max);
96
97
int
vec_size_max = policy.vector_length_max();
98
vector_size_
= roundDownToPowerOfTwo(std::min(vec_size_max, in_vector_size));
99
fad_vector_size_
= roundDownToPowerOfTwo(std::min(vec_size_max, in_fad_vector_size));
100
}
101
102
void
HP::setUseSharedMemory
(
const
bool
& in_use_shared_memory,
103
const
bool
& in_fad_use_shared_memory)
104
{
105
use_shared_memory_
= in_use_shared_memory;
106
fad_use_shared_memory_
= in_fad_use_shared_memory;
107
}
108
109
}
Panzer_HierarchicParallelism.hpp
panzer::HP::team_size_
int team_size_
If true, the team size is set with Kokkos::AUTO().
Definition
Panzer_HierarchicParallelism.hpp:54
panzer::HP::inst
static HP & inst()
Private ctor.
Definition
Panzer_HierarchicParallelism.cpp:62
panzer::HP::vector_size_
int vector_size_
User specified team size.
Definition
Panzer_HierarchicParallelism.hpp:55
panzer::HP::setUseSharedMemory
void setUseSharedMemory(const bool &use_shared_memory, const bool &fad_use_shared_memory)
Tell kokkos kernels if they should use shared memory. This is very problem dependent.
Definition
Panzer_HierarchicParallelism.cpp:102
panzer::HP::use_auto_team_size_
bool use_auto_team_size_
Definition
Panzer_HierarchicParallelism.hpp:53
panzer::HP::fad_use_shared_memory_
bool fad_use_shared_memory_
Use shared memory kokkos kernels for non-fad types.
Definition
Panzer_HierarchicParallelism.hpp:58
panzer::HP::use_shared_memory_
bool use_shared_memory_
FAD vector size.
Definition
Panzer_HierarchicParallelism.hpp:57
panzer::HP::HP
HP()
Use shared memory kokkos kernels for fad types.
Definition
Panzer_HierarchicParallelism.cpp:47
panzer::HP::fad_vector_size_
int fad_vector_size_
Default vector size for non-AD types.
Definition
Panzer_HierarchicParallelism.hpp:56
panzer::HP::overrideSizes
void overrideSizes(const int &team_size, const int &vector_size, const int &fad_vector_size, const bool force_override_safety=false)
Definition
Panzer_HierarchicParallelism.cpp:78
panzer
Computes .
Definition
Panzer_BasisValues_Evaluator_decl.hpp:54
Generated by
1.17.0