Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Change dawn-opt default behavior #1029

Open
Stagno opened this issue Oct 6, 2020 · 2 comments
Open

Change dawn-opt default behavior #1029

Stagno opened this issue Oct 6, 2020 · 2 comments
Labels

Comments

@Stagno
Copy link
Contributor

Stagno commented Oct 6, 2020

Using the new dusk cli (dawn-ico/dusk#49) the following problem with dawn occurred to me.
Behaviors of these two commands, which should do the same thing before code generation, differ:

dusk ./tests/examples/laplacian_fvm.py -generate-code -b ico-cuda -verbose
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/Lowering.cpp:606] INFO: Intializing StencilInstantiation of `laplacian_fvm`
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/Lowering.cpp:397] INFO: Processing vertical region at -1:-1
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/Lowering.cpp:401] INFO: Inserting statements ... 
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/Lowering.cpp:410] INFO: Inserted 7 statements
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/Lowering.cpp:418] INFO: Filling accesses ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/Lowering.cpp:643] INFO: Done initializing StencilInstantiation
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/Lowering.cpp:669] INFO: Done initializing StencilInstantiation
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/Driver.cpp:107] INFO: Starting parallelization passes for `laplacian_fvm` ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:46] INFO: Starting PassInlining ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:59] INFO: Done with PassInlining : Success
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:46] INFO: Starting PassFieldVersioning ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassFieldVersioning.cpp:154] INFO: laplacian_fvm: no rename
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:59] INFO: Done with PassFieldVersioning : Success
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:46] INFO: Starting PassTemporaryType ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassTemporaryType.cpp:155] INFO: laplacian_fvm: demote: nabla2t2_vec
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassTemporaryType.cpp:155] INFO: laplacian_fvm: demote: nabla2t1_vec
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:59] INFO: Done with PassTemporaryType : Success
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:46] INFO: Starting PassLocalVarType ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:59] INFO: Done with PassLocalVarType : Success
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:46] INFO: Starting PassRemoveScalars ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:59] INFO: Done with PassRemoveScalars : Success
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:46] INFO: Starting PassStageSplitAllStatements ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:59] INFO: Done with PassStageSplitAllStatements : Success
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:46] INFO: Starting PassSetStageLocationType ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:59] INFO: Done with PassSetStageLocationType : Success
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:46] INFO: Starting PassTemporaryType ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassTemporaryType.cpp:155] INFO: laplacian_fvm: promote: __local_nabl_71
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassTemporaryType.cpp:155] INFO: laplacian_fvm: promote: __local_nabl_70
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:59] INFO: Done with PassTemporaryType : Success
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:46] INFO: Starting PassFixVersionedInputFields ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:59] INFO: Done with PassFixVersionedInputFields : Success
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:46] INFO: Starting PassSetStageLocationType ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:59] INFO: Done with PassSetStageLocationType : Success
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:46] INFO: Starting PassSetSyncStage ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:59] INFO: Done with PassSetSyncStage : Success
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:46] INFO: Starting PassValidation ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:59] INFO: Done with PassValidation : Success
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/Driver.cpp:112] INFO: Done with parallelization passes for `laplacian_fvm`
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/Driver.cpp:178] WARNING: PassStageReordering currently disabled for unstructured meshes!
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/Driver.cpp:243] WARNING: PassSetBlockSize currently disabled for unstructured meshes!
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/Driver.cpp:287] INFO: Starting optimization and analysis passes for `laplacian_fvm` ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:46] INFO: Starting PassSetStageName ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:59] INFO: Done with PassSetStageName : Success
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:46] INFO: Starting PassValidation ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:59] INFO: Done with PassValidation : Success
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:46] INFO: Starting PassSetStageGraph ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:59] INFO: Done with PassSetStageGraph : Success
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:46] INFO: Starting PassSetDependencyGraph ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:59] INFO: Done with PassSetDependencyGraph : Success
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:46] INFO: Starting PassStageMerger ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:59] INFO: Done with PassStageMerger : Success
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:46] INFO: Starting PassTemporaryType ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassTemporaryType.cpp:155] INFO: laplacian_fvm: demote: __tmp_nab_71
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassTemporaryType.cpp:155] INFO: laplacian_fvm: demote: __tmp_nab_70
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:59] INFO: Done with PassTemporaryType : Success
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:46] INFO: Starting PassLocalVarType ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:59] INFO: Done with PassLocalVarType : Success
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:46] INFO: Starting PassRemoveScalars ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:59] INFO: Done with PassRemoveScalars : Success
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:46] INFO: Starting PassSetSyncStage ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:59] INFO: Done with PassSetSyncStage : Success
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:46] INFO: Starting PassValidation ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:59] INFO: Done with PassValidation : Success
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:46] INFO: Starting PassSetCaches ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:59] INFO: Done with PassSetCaches : Success
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:46] INFO: Starting PassValidation ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:59] INFO: Done with PassValidation : Success
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/Driver.cpp:292] INFO: Done with optimization and analysis passes for `laplacian_fvm`
[/home/giacomo/dawn/dawn/src/dawn/CodeGen/Cuda-ico/CudaIcoCodeGen.cpp:1000] INFO: Starting code generation for ...
Assertion failed: `0' Var Access not allowed in this context
Function: 'virtual void dawn::codegen::cudaico::ASTStencilBody::visit(const std::shared_ptr<dawn::ast::VarAccessExpr>&)'
Location: /home/giacomo/dawn/dawn/src/dawn/CodeGen/Cuda-ico/ASTStencilBody.cpp:77
Aborted (core dumped)
dusk ./tests/examples/laplacian_fvm.py | dawn-opt --verbose
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/Lowering.cpp:606] INFO: Intializing StencilInstantiation of `laplacian_fvm`
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/Lowering.cpp:397] INFO: Processing vertical region at -1:-1
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/Lowering.cpp:401] INFO: Inserting statements ... 
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/Lowering.cpp:410] INFO: Inserted 7 statements
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/Lowering.cpp:418] INFO: Filling accesses ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/Lowering.cpp:643] INFO: Done initializing StencilInstantiation
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/Lowering.cpp:669] INFO: Done initializing StencilInstantiation
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/Driver.cpp:107] INFO: Starting parallelization passes for `laplacian_fvm` ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:46] INFO: Starting PassInlining ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:59] INFO: Done with PassInlining : Success
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:46] INFO: Starting PassFieldVersioning ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassFieldVersioning.cpp:154] INFO: laplacian_fvm: no rename
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:59] INFO: Done with PassFieldVersioning : Success
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:46] INFO: Starting PassTemporaryType ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassTemporaryType.cpp:155] INFO: laplacian_fvm: demote: nabla2t2_vec
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassTemporaryType.cpp:155] INFO: laplacian_fvm: demote: nabla2t1_vec
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:59] INFO: Done with PassTemporaryType : Success
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:46] INFO: Starting PassLocalVarType ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:59] INFO: Done with PassLocalVarType : Success
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:46] INFO: Starting PassRemoveScalars ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:59] INFO: Done with PassRemoveScalars : Success
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:46] INFO: Starting PassStageSplitAllStatements ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:59] INFO: Done with PassStageSplitAllStatements : Success
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:46] INFO: Starting PassSetStageLocationType ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:59] INFO: Done with PassSetStageLocationType : Success
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:46] INFO: Starting PassTemporaryType ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassTemporaryType.cpp:155] INFO: laplacian_fvm: promote: __local_nabl_131
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassTemporaryType.cpp:155] INFO: laplacian_fvm: promote: __local_nabl_130
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:59] INFO: Done with PassTemporaryType : Success
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:46] INFO: Starting PassFixVersionedInputFields ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:59] INFO: Done with PassFixVersionedInputFields : Success
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:46] INFO: Starting PassSetStageLocationType ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:59] INFO: Done with PassSetStageLocationType : Success
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:46] INFO: Starting PassSetSyncStage ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:59] INFO: Done with PassSetSyncStage : Success
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:46] INFO: Starting PassValidation ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:59] INFO: Done with PassValidation : Success
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/Driver.cpp:112] INFO: Done with parallelization passes for `laplacian_fvm`
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/Driver.cpp:287] INFO: Starting optimization and analysis passes for `laplacian_fvm` ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:46] INFO: Starting PassInlining ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:59] INFO: Done with PassInlining : Success
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:46] INFO: Starting PassValidation ...
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/PassManager.cpp:59] INFO: Done with PassValidation : Success
[/home/giacomo/dawn/dawn/src/dawn/Optimizer/Driver.cpp:292] INFO: Done with optimization and analysis passes for `laplacian_fvm`

Specifically, it seems that the (default) passes run differ between the implementation of dawn-opt and dawn4py.compile.
Compilation is failing in the dawn4py.compile path. This suggest that its set of default passes is wrong.

@Stagno Stagno added bug backend dawn related labels Oct 6, 2020
@Stagno
Copy link
Contributor Author

Stagno commented Oct 6, 2020

Investigating this further i found out that the problem is that the dawn4py.compile path was running pass groups in the defaultPassGroups(): {PassGroup::SetStageName, PassGroup::StageReordering, PassGroup::StageMerger, PassGroup::SetCaches, PassGroup::SetBlockSize}, while the dawn-opt path was just lowering.
StageMerger proved to be the problematic one because it generates local variables, not supported by cuda-ico (#1030).

Still it remains that the 2 paths differ substantially in which groups they run and, since one would not expect that to happen, we should uniform them.

@Stagno
Copy link
Contributor Author

Stagno commented Oct 14, 2020

Decision taken was to also make dawn-opt run the defaultPassGroups() by default (without passing option --default-opt), to reflect the expectation that usually compilers apply some optimizations by default.
Transforming this into a task.

@Stagno Stagno added enhancement and removed bug labels Oct 14, 2020
@Stagno Stagno changed the title Different behaviors of dawn-opt and dawn4py.compile Change dawn-opt default behavior Oct 14, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant