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

Adjust class hierarchy for overlapping stuff #429

Open
wants to merge 2 commits into
base: main
Choose a base branch
from

Conversation

phofl
Copy link
Collaborator

@phofl phofl commented Nov 27, 2023

Not sure what to think of this (looking into cumulative stuff, so this came up again)

MapOverlap behaves like Blockwise stuff if we look at the expression when trying to make decisions about alignment and things like this but Blockwise obviously isn't quite correct, since we need neighbouring partitions

Injecting another layer solves this kind of, but I don't want to end up in inheritance hell...

Comment on lines +1096 to +1107
class BlockwiseOverlapping(Expr):
"""Super class that operates like a blockwise op

We require information from neighboring partitions, so we can't prune partitions
before lowering, but the spec is the same as for Blockwise ops, we don't reoder
things, alignment stays consistent, ...

"""

pass


Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why does this exist? Is there some shared structure between these two that we need to handle?

My intuition here is just to have

class Blockwise(Expr):
    ...

class MapOverlap(Expr):
    ...

At least from this PR it doesn't seem like we're using the intermediate classes.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not not yet, are_co_aligned can leverage this for example

Every check that only cares about the partitioning layout should fall back to this base class

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My recommendation would be to wait until we have a demonstrable need, and even in that case to consider using (Blockwise, MapOverlap) instead if possible.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated the PR with the use-case

It's a bit similar to how Blockwise and Elemwise relate to each other

@@ -2454,7 +2489,7 @@ def non_blockwise_ancestors(expr):
e = stack.pop()
if isinstance(e, IO):
yield e
elif isinstance(e, Blockwise):
elif isinstance(e, BlockwiseOverlapping):
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If this is the only application, then this seems lighter weight to me

Suggested change
elif isinstance(e, BlockwiseOverlapping):
elif isinstance(e, (Blockwise, MapOverlap)):

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants