Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • AssignmentCollection.__str__
  • AssignmentCollection.free-bound_fields
  • AssignmentCollection.has_exclusive_writes
  • ConditionalFieldAccess
  • Datahandling.add_arrays
  • Field.__repr__
  • Field.hashable_contents
  • InterpolatorAccess.__getnewargs__
  • KernelFunction.field_read
  • KernelFuntion.fields_read
  • KernelWrapper
  • LoopCounterSymbols-nonnegative
  • NotIterable
  • RecursiveDotDict
  • SerialDataHandling.run_kernel-kwargs
  • SympyAssignment.__hash__
  • TextureDeclaration.__str__
  • WIP
  • WIP2
  • add-AssignmentCollection.free-bound_fields
  • add-Field.itemsize
  • add-arrays-ext
  • add-dependency-jinja2
  • add-pystencils-autodiff
  • always-use-codegen.rewriting.optimize
  • append-assignments-to-ast
  • assert-cast_func-arg-is-type
  • assertion-headers
  • assumptions-cast_func
  • astnodes-for-interpolation
  • astnodes-for-interpolation-rebased
  • auto-for-assignments
  • auto-optimizations
  • autodiff
  • bugfix-avoid-east-and-west-const
  • bugfix-collate-types-for-boolean-function
  • bugfix-fields_accessed-for-InterpolatorAccess
  • bugfix-ghostlayers-gpu
  • bugfix-textures
  • c11-printer
  • cast_func-assumptions
  • complex-numbers
  • complex-numbers-with-type-interference
  • create_boundary_kwargs
  • create_type_in_cast_func
  • csqrt
  • cuda-array-interface
  • cuda-autotune
  • cuda.TextureReference.set_array
  • custom-fields-different-size-in-transformations
  • dark-mode
  • destructuring-field-binding
  • documentation-for-json-backend
  • dtype-for-add_arrays
  • dtype-from-fields
  • eliminate-usage-of-equation-collection
  • extra-asserts-sympy-issue
  • fix-ParallelDataHandling-bug!
  • fix-TypedImaginaryUnit.__getnewargs__
  • fix-arrayhandlers
  • fix-custom-fields-cudakernel
  • fix-dirichlet
  • fix-documentation
  • fix-free/defined-symbols-for-non-Assignments
  • fix-kerncraft
  • fix-llvm-gpu
  • fix-opencl
  • fix-opencl-extra-in-readme
  • fix-opencl-llvm-gpu
  • fix-rotate_weights_and_apply
  • fix-trailing-whitespace-in-rng.py
  • foo
  • function-call-printing
  • functional_coordinate_transform
  • gpu_liveness_opts
  • graph-datahandling
  • graph-datahandling-tom
  • graphviz
  • graphviz-01_tutorial
  • hyteg
  • improved_comm
  • infer-symbol-types-from-definition
  • infinity
  • infocomp_hacked
  • interpolation-24.0.9
  • interpolation-refactoring
  • kernel-wrapper-typeannotations
  • krasser-feature-branch
  • llvm-experiments
  • make_python_function
  • make_python_function-rebased
  • master
  • matrix-symbols
  • mlir
  • no-cuda-for-doc/lint
  • not-unify-shapes-branch
  • omit-globals-when-printing-c-code
  • opencl-datahandling
  • opencl-to-spirv
  • original_assignment-hack
  • 1.0
  • release/0.2.1
  • release/0.2.2
  • release/0.2.3
  • release/0.2.4
  • release/0.2.6
  • release/0.2.7
  • release/1.0
  • release/1.0.1
  • release/1.1
  • release/1.1.1
  • v1.0
  • v1.1
113 results

Target

Select target project
No results found
Select Git revision
  • 66-absolute-access-is-probably-not-copied-correctly-after-_eval_subs
  • const_fix
  • fhennig/v2.0-deprecations
  • fma
  • gpu_bufferfield_fix
  • gpu_liveness_opts
  • holzer-master-patch-46757
  • hyteg
  • improved_comm
  • master
  • target_dh_refactoring
  • v2.0-dev
  • vectorization_sqrt_fix
  • zikeliml/124-rework-tutorials
  • zikeliml/Task-96-dotExporterForAST
  • last/Kerncraft
  • last/LLVM
  • last/OpenCL
  • release/0.2.1
  • release/0.2.10
  • release/0.2.11
  • release/0.2.12
  • release/0.2.13
  • release/0.2.14
  • release/0.2.15
  • release/0.2.2
  • release/0.2.3
  • release/0.2.4
  • release/0.2.6
  • release/0.2.7
  • release/0.2.8
  • release/0.2.9
  • release/0.3.0
  • release/0.3.1
  • release/0.3.2
  • release/0.3.3
  • release/0.3.4
  • release/0.4.0
  • release/0.4.1
  • release/0.4.2
  • release/0.4.3
  • release/0.4.4
  • release/1.0
  • release/1.0.1
  • release/1.1
  • release/1.1.1
  • release/1.2
  • release/1.3
  • release/1.3.1
  • release/1.3.2
  • release/1.3.3
  • release/1.3.4
  • release/1.3.5
  • release/1.3.6
  • release/1.3.7
  • release/2.0.dev0
56 results
Show changes

Commits on Source 2

4 files
+ 58
10
Compare changes
  • Side-by-side
  • Inline

Files

Original line number Original line Diff line number Diff line
@@ -669,10 +669,10 @@ class DestructuringBindingsForFieldClass(Node):
    """
    """
    CLASS_TO_MEMBER_DICT = {
    CLASS_TO_MEMBER_DICT = {
        FieldPointerSymbol: "data",
        FieldPointerSymbol: "data",
        FieldShapeSymbol: "shape",
        FieldShapeSymbol: "shape[%i]",
        FieldStrideSymbol: "stride"
        FieldStrideSymbol: "stride[%i]"
    }
    }
    CLASS_NAME_TEMPLATE = jinja2.Template("Field<{{ dtype }}, {{ ndim }}>")
    CLASS_NAME_TEMPLATE = jinja2.Template("PyStencilsField<{{ dtype }}, {{ ndim }}>")


    @property
    @property
    def fields_accessed(self) -> Set['ResolvedFieldAccess']:
    def fields_accessed(self) -> Set['ResolvedFieldAccess']:
@@ -681,7 +681,7 @@ class DestructuringBindingsForFieldClass(Node):


    def __init__(self, body):
    def __init__(self, body):
        super(DestructuringBindingsForFieldClass, self).__init__()
        super(DestructuringBindingsForFieldClass, self).__init__()
        self.headers = ['<Field.h>']
        self.headers = ['<PyStencilsField.h>']
        self.body = body
        self.body = body


    @property
    @property
Original line number Original line Diff line number Diff line
@@ -6,7 +6,7 @@ import sympy as sp
from sympy.core import S
from sympy.core import S
from sympy.printing.ccode import C89CodePrinter
from sympy.printing.ccode import C89CodePrinter


from pystencils.astnodes import DestructuringBindingsForFieldClass, KernelFunction, Node
from pystencils.astnodes import KernelFunction, Node
from pystencils.cpu.vectorization import vec_all, vec_any
from pystencils.cpu.vectorization import vec_all, vec_any
from pystencils.data_types import (
from pystencils.data_types import (
    PointerType, VectorType, address_of, cast_func, create_type, get_type_of_expression,
    PointerType, VectorType, address_of, cast_func, create_type, get_type_of_expression,
@@ -261,11 +261,12 @@ class CBackend:
    def _print_DestructuringBindingsForFieldClass(self, node: Node):
    def _print_DestructuringBindingsForFieldClass(self, node: Node):
        # Define all undefined symbols
        # Define all undefined symbols
        undefined_field_symbols = node.symbols_defined
        undefined_field_symbols = node.symbols_defined
        destructuring_bindings = ["%s = %s.%s%s;" %
        destructuring_bindings = ["%s %s = %s.%s;" %
                                  (u.name,
                                  (u.dtype,
                                   u.name,
                                   u.field_name if hasattr(u, 'field_name') else u.field_names[0],
                                   u.field_name if hasattr(u, 'field_name') else u.field_names[0],
                                   DestructuringBindingsForFieldClass.CLASS_TO_MEMBER_DICT[u.__class__],
                                   node.CLASS_TO_MEMBER_DICT[u.__class__] %
                                   "" if type(u) == FieldPointerSymbol else ("[%i]" % u.coordinate))
                                   (() if type(u) == FieldPointerSymbol else (u.coordinate,)))
                                  for u in undefined_field_symbols
                                  for u in undefined_field_symbols
                                  ]
                                  ]
        destructuring_bindings.sort()  # only for code aesthetics
        destructuring_bindings.sort()  # only for code aesthetics
+19 −0
Original line number Original line Diff line number Diff line
#pragma once

extern "C++" {
#ifdef __CUDA_ARCH__
template <typename DTYPE_T, std::size_t DIMENSION> struct PyStencilsField {
  DTYPE_T *data;
  DTYPE_T shape[DIMENSION];
  DTYPE_T stride[DIMENSION];
};
#else
#include <array>

template <typename DTYPE_T, std::size_t DIMENSION> struct PyStencilsField {
  DTYPE_T *data;
  std::array<DTYPE_T, DIMENSION> shape;
  std::array<DTYPE_T, DIMENSION> stride;
};
#endif
}
Original line number Original line Diff line number Diff line
@@ -8,9 +8,13 @@


"""
"""
import sympy
import sympy
import jinja2



import pystencils
import pystencils
from pystencils.astnodes import DestructuringBindingsForFieldClass
from pystencils.astnodes import DestructuringBindingsForFieldClass
from pystencils.kernelparameters import  FieldPointerSymbol, FieldShapeSymbol, FieldStrideSymbol





def test_destructuring_field_class():
def test_destructuring_field_class():
@@ -19,15 +23,39 @@ def test_destructuring_field_class():
    normal_assignments = pystencils.AssignmentCollection([pystencils.Assignment(
    normal_assignments = pystencils.AssignmentCollection([pystencils.Assignment(
        z[0, 0], x[0, 0] * sympy.log(x[0, 0] * y[0, 0]))], [])
        z[0, 0], x[0, 0] * sympy.log(x[0, 0] * y[0, 0]))], [])


    ast = pystencils.create_kernel(normal_assignments)
    ast = pystencils.create_kernel(normal_assignments, target='gpu')
    print(pystencils.show_code(ast))
    print(pystencils.show_code(ast))


    ast.body = DestructuringBindingsForFieldClass(ast.body)
    ast.body = DestructuringBindingsForFieldClass(ast.body)
    print(pystencils.show_code(ast))
    print(pystencils.show_code(ast))
    ast.compile()



class DestructuringEmojiClass(DestructuringBindingsForFieldClass):
    CLASS_TO_MEMBER_DICT = {
        FieldPointerSymbol: "🥶",
        FieldShapeSymbol: "😳_%i",
        FieldStrideSymbol: "🥵_%i"
    }
    CLASS_NAME_TEMPLATE = jinja2.Template("🤯<{{ dtype }}, {{ ndim }}>")
    def __init__(self, node):
        super().__init__(node)
        self.headers = []
        
    
def test_destructuring_alternative_field_class():
    z, x, y = pystencils.fields("z, y, x: [2d]")

    normal_assignments = pystencils.AssignmentCollection([pystencils.Assignment(
        z[0, 0], x[0, 0] * sympy.log(x[0, 0] * y[0, 0]))], [])

    ast = pystencils.create_kernel(normal_assignments, target='gpu')
    ast.body = DestructuringEmojiClass(ast.body)
    print(pystencils.show_code(ast))


def main():
def main():
    test_destructuring_field_class()
    test_destructuring_field_class()
    test_destructuring_alternative_field_class()




if __name__ == '__main__':
if __name__ == '__main__':