diff --git a/cpu/cpujit.py b/cpu/cpujit.py index 20d414aeb3979c8461b176356d708d7a07ff5111..459359e3a347c113d389e60434b1d02362de284a 100644 --- a/cpu/cpujit.py +++ b/cpu/cpujit.py @@ -170,7 +170,8 @@ def compile(code, tmpDir, libFile, createAssemblyCode=False): def compileAndLoad(kernelFunctionNode): tmpDir = tempfile.mkdtemp() libFile = os.path.join(tmpDir, "jit.so") - compile(generateC(kernelFunctionNode), tmpDir, libFile) + sourceCode = generateC(kernelFunctionNode) + compile(sourceCode, tmpDir, libFile) loadedJitLib = cdll.LoadLibrary(libFile) shutil.rmtree(tmpDir) diff --git a/sympyextensions.py b/sympyextensions.py index 687f97d79b7fbefdbdf7df471df054d966124eda..73dc9e2faa4751b79366dffc08e617ec2eac6963 100644 --- a/sympyextensions.py +++ b/sympyextensions.py @@ -129,7 +129,7 @@ def replaceSecondOrderProducts(expr, searchSymbols, positive=None, replaceMixed= else: otherFactors *= t if len(distinctVelTerms) == 2 and nrOfVelTerms == 2: - u, v = list(distinctVelTerms) + u, v = sorted(list(distinctVelTerms), key=lambda symbol: symbol.name) if positive is None: otherFactorsWithoutSymbols = otherFactors for s in otherFactors.atoms(sp.Symbol): diff --git a/transformations.py b/transformations.py index e026cd3797a9c0e3388680387761256282fbf1b6..e07b1de9c7015507384dc3af15001fcff63d0aa2 100644 --- a/transformations.py +++ b/transformations.py @@ -1,4 +1,4 @@ -from collections import defaultdict +from collections import defaultdict, OrderedDict from operator import attrgetter import sympy as sp @@ -62,7 +62,7 @@ def makeLoopOverDomain(body, functionName, iterationSlice=None, ghostLayers=None if len(shapeSet) != 1: raise ValueError("Differently sized field accesses in loop body: " + str(shapeSet)) - shape = list(shapeSet)[0] + shape = list(sorted(shapeSet, key=lambda e: str(e[0])))[0] if iterationSlice is not None: iterationSlice = normalizeSlice(iterationSlice, shape) @@ -222,6 +222,9 @@ def resolveFieldAccesses(astNode, readOnlyFieldNames=set(), fieldToBasePointerIn counters to index the field these symbols are used as coordinates :return: transformed AST """ + fieldToBasePointerInfo = OrderedDict(sorted(fieldToBasePointerInfo.items(), key=lambda pair: pair[0])) + fieldToFixedCoordinates = OrderedDict(sorted(fieldToFixedCoordinates.items(), key=lambda pair: pair[0])) + def visitSympyExpr(expr, enclosingBlock, sympyAssignment): if isinstance(expr, Field.Access): fieldAccess = expr @@ -359,9 +362,8 @@ def splitInnerLoop(astNode, symbolGroups): assert len(outerLoop) == 1, "Error in AST, multiple outermost loops." outerLoop = outerLoop[0] - symbolsWithTemporaryArray = dict() - - assignmentMap = {a.lhs: a for a in innerLoop.body.args} + symbolsWithTemporaryArray = OrderedDict() + assignmentMap = OrderedDict((a.lhs, a) for a in innerLoop.body.args) assignmentGroups = [] for symbolGroup in symbolGroups: