Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Sebastian Bindgen
pystencils
Commits
47aee5fa
Commit
47aee5fa
authored
Dec 04, 2019
by
Martin Bauer
Browse files
Merge branch 'auto-for-assignments' into 'master'
Auto for assignments See merge request
!95
parents
9f6bbd4c
05aa005a
Changes
3
Hide whitespace changes
Inline
Side-by-side
pystencils/astnodes.py
View file @
47aee5fa
...
...
@@ -518,12 +518,13 @@ class LoopOverCoordinate(Node):
class
SympyAssignment
(
Node
):
def
__init__
(
self
,
lhs_symbol
,
rhs_expr
,
is_const
=
True
):
def
__init__
(
self
,
lhs_symbol
,
rhs_expr
,
is_const
=
True
,
use_auto
=
False
):
super
(
SympyAssignment
,
self
).
__init__
(
parent
=
None
)
self
.
_lhs_symbol
=
lhs_symbol
self
.
rhs
=
sp
.
sympify
(
rhs_expr
)
self
.
_is_const
=
is_const
self
.
_is_declaration
=
self
.
__is_declaration
()
self
.
use_auto
=
use_auto
def
__is_declaration
(
self
):
if
isinstance
(
self
.
_lhs_symbol
,
cast_func
):
...
...
pystencils/backends/cbackend.py
View file @
47aee5fa
...
...
@@ -33,9 +33,9 @@ def generate_c(ast_node: Node,
with_globals
=
True
)
->
str
:
"""Prints an abstract syntax tree node as C or CUDA code.
This function does not need to distinguish between C, C++ or CUDA code, it just prints 'C-like'
code as encoded
in the abstract syntax tree (AST). The AST is built differently for C or CUDA by calling different
create_kernel
functions.
This function does not need to distinguish
for most AST nodes
between C, C++ or CUDA code, it just prints 'C-like'
code as encoded
in the abstract syntax tree (AST). The AST is built differently for C or CUDA by calling different
create_kernel
functions.
Args:
ast_node:
...
...
@@ -230,11 +230,15 @@ class CBackend:
def
_print_SympyAssignment
(
self
,
node
):
if
node
.
is_declaration
:
if
node
.
is_const
:
prefix
=
'const
'
if
node
.
use_auto
:
data_type
=
'auto
'
else
:
prefix
=
''
data_type
=
prefix
+
self
.
_print
(
node
.
lhs
.
dtype
).
replace
(
' const'
,
''
)
+
" "
if
node
.
is_const
:
prefix
=
'const '
else
:
prefix
=
''
data_type
=
prefix
+
self
.
_print
(
node
.
lhs
.
dtype
).
replace
(
' const'
,
''
)
+
" "
return
"%s%s = %s;"
%
(
data_type
,
self
.
sympy_printer
.
doprint
(
node
.
lhs
),
self
.
sympy_printer
.
doprint
(
node
.
rhs
))
...
...
pystencils/kernelcreation.py
View file @
47aee5fa
...
...
@@ -26,7 +26,8 @@ def create_kernel(assignments,
gpu_indexing
=
'block'
,
gpu_indexing_params
=
MappingProxyType
({}),
use_textures_for_interpolation
=
True
,
cpu_prepend_optimizations
=
[]):
cpu_prepend_optimizations
=
[],
use_auto_for_assignments
=
False
):
"""
Creates abstract syntax tree (AST) of kernel, using a list of update equations.
...
...
@@ -102,12 +103,10 @@ def create_kernel(assignments,
vectorize
(
ast
,
**
cpu_vectorize_info
)
else
:
raise
ValueError
(
"Invalid value for cpu_vectorize_info"
)
return
ast
elif
target
==
'llvm'
:
from
pystencils.llvm
import
create_kernel
ast
=
create_kernel
(
assignments
,
type_info
=
data_type
,
split_groups
=
split_groups
,
iteration_slice
=
iteration_slice
,
ghost_layers
=
ghost_layers
)
return
ast
elif
target
==
'gpu'
:
from
pystencils.gpucuda
import
create_cuda_kernel
ast
=
create_cuda_kernel
(
assignments
,
type_info
=
data_type
,
...
...
@@ -115,10 +114,15 @@ def create_kernel(assignments,
iteration_slice
=
iteration_slice
,
ghost_layers
=
ghost_layers
,
skip_independence_check
=
skip_independence_check
,
use_textures_for_interpolation
=
use_textures_for_interpolation
)
return
ast
else
:
raise
ValueError
(
"Unknown target %s. Has to be one of 'cpu', 'gpu' or 'llvm' "
%
(
target
,))
if
use_auto_for_assignments
:
for
a
in
ast
.
atoms
(
SympyAssignment
):
a
.
use_auto
=
True
return
ast
def
create_indexed_kernel
(
assignments
,
index_fields
,
...
...
Write
Preview
Supports
Markdown
0%
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!
Cancel
Please
register
or
sign in
to comment