Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
D
dune-codegen
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
This is an archived project. Repository and other project resources are read-only.
Show more breadcrumbs
Christian Heinigk
dune-codegen
Commits
0d78c584
Commit
0d78c584
authored
6 years ago
by
Dominic Kempf
Browse files
Options
Downloads
Patches
Plain Diff
Beautify the implementation a small bit
parent
0d16223f
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
python/dune/perftool/sumfact/vectorization.py
+24
-23
24 additions, 23 deletions
python/dune/perftool/sumfact/vectorization.py
with
24 additions
and
23 deletions
python/dune/perftool/sumfact/vectorization.py
+
24
−
23
View file @
0d78c584
...
...
@@ -85,13 +85,15 @@ def explicit_costfunction(sf):
return
1000000000000
_global_kernel_amount
=
0
def
target_costfunction
(
sf
):
# The cost of a kernel is given by the difference to the desired target cost.
# Pitfall: The target cost needs to be weighed to account for this being called
# on subsets and not on a full vectorization strategy!
all_sf
,
_
=
filter_active_inactive_sumfacts
()
total
=
len
(
all_sf
)
target
=
float
(
get_form_option
(
"
vectorization_target
"
))
realcost
=
costmodel
(
sf
)
ratio
=
sf
.
horizontal_width
/
_global_kernel_amount
ratio
=
sf
.
horizontal_width
/
total
return
abs
(
realcost
-
ratio
*
target
)
...
...
@@ -110,8 +112,7 @@ def strategy_cost(strat_tuple):
raise
NotImplementedError
(
"
Vectorization strategy
'
{}
'
unknown!
"
.
format
(
s
))
keys
=
set
(
sf
.
cache_key
for
sf
in
strategy
.
values
())
if
qp
is
not
None
:
set_quadrature_points
(
qp
)
set_quadrature_points
(
qp
)
# Sum over all the sum factorization kernels in the realization
score
=
0.0
...
...
@@ -154,13 +155,7 @@ def stringify_vectorization_strategy(strategy):
return
result
def
decide_vectorization_strategy
():
"""
Decide how to vectorize!
Note that the vectorization of the quadrature loop is independent of this,
as it is implemented through a post-processing (== loopy transformation) step.
"""
logger
=
logging
.
getLogger
(
__name__
)
def
filter_active_inactive_sumfacts
():
# Retrieve all sum factorization kernels for stage 1 and 3
from
dune.perftool.generation
import
retrieve_cache_items
all_sumfacts
=
[
i
for
i
in
retrieve_cache_items
(
"
kernel_default and sumfactnodes
"
)]
...
...
@@ -174,6 +169,18 @@ def decide_vectorization_strategy():
# All sum factorization kernels that get used
active_sumfacts
=
[
i
for
i
in
all_sumfacts
if
i
.
stage
==
3
or
i
in
basis_sumfacts
]
return
active_sumfacts
,
inactive_sumfacts
def
decide_vectorization_strategy
():
"""
Decide how to vectorize!
Note that the vectorization of the quadrature loop is independent of this,
as it is implemented through a post-processing (== loopy transformation) step.
"""
logger
=
logging
.
getLogger
(
__name__
)
active_sumfacts
,
inactive_sumfacts
=
filter_active_inactive_sumfacts
()
# If no vectorization is needed, abort now
if
get_form_option
(
"
vectorization_strategy
"
)
==
"
none
"
or
(
get_global_context_value
(
"
form_type
"
)
==
"
jacobian
"
and
not
get_form_option
(
"
vectorization_jacobians
"
)):
for
sf
in
all_sumfacts
:
...
...
@@ -208,18 +215,12 @@ def decide_vectorization_strategy():
sfdict
=
add_to_frozendict
(
sfdict
,
{
sf
:
0
for
sf
in
inactive_sumfacts
})
# Register the results
for
sf
in
all_sumfacts
:
from
itertools
import
chain
for
sf
in
chain
(
active_sumfacts
,
inactive_sumfacts
):
_cache_vectorization_info
(
sf
,
sfdict
[
sf
])
def
level1_optimal_vectorization_strategy
(
sumfacts
,
width
):
# If this uses the 'target' cost model, we need to store information on how many
# sum factorization kernels need to be implemented. This will be used to correctly
# weight the cost target in the cost function.
if
get_form_option
(
"
vectorization_strategy
"
)
==
"
target
"
:
global
_global_kernel_amount
_global_kernel_amount
=
len
(
sumfacts
)
# Gather a list of possible quadrature point tuples
quad_points
=
[
quadrature_points_per_direction
()]
if
get_form_option
(
"
vectorization_allow_quadrature_changes
"
):
...
...
@@ -255,11 +256,11 @@ def level1_optimal_vectorization_strategy(sumfacts, width):
# Write an entry into a csvfile which connects the given measuring identifier with a cost
from
dune.testtools.parametertree.parser
import
parse_ini_file
inifile
=
parse_ini_file
(
get_option
(
"
inifile
"
))
inifile
=
parse_ini_file
(
get_option
(
"
ini
_
file
"
))
identifier
=
inifile
[
"
identifier
"
]
filename
=
join
(
get_option
(
"
project_basedir
"
),
"
costmodel-verification
"
,
"
mapping.csv
"
)
#TODO: Depending on the number of samples, we might need a file lock here.
#
TODO: Depending on the number of samples, we might need a file lock here.
with
open
(
filename
,
'
a
'
)
as
f
:
f
.
write
(
"
{} {}
"
.
format
(
identifier
,
cost
))
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment