-
Notifications
You must be signed in to change notification settings - Fork 3.5k
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
[OPENCL] Always use convert_T for type conversion #14972
Conversation
This PR changes the Cast in OpenCL to always relying on convert_T to get closer to the spec and more reliable.
@@ -150,50 +158,38 @@ def check_type_casting(ctx, n, dtype): | |||
tvm.tir.all( | |||
*[ | |||
i // block_size == tvm.tir.const(3, "int32"), | |||
i % block_size == tvm.tir.const(3, "int32"), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This test has covered a bug in TVM which was fixed. Why did you change the compute function? Can we keep it as it was?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
i also migrated the original test to the latest TensorIR so the test is future proof.
Interestingly TensorIR becomes smarter :) so the original condition get simplified and becomes i == 15
here. So I modified the test to ensure we cover most behavior we intend to cover around type casting
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Unfortunately relying on string pattern was too reliable given the set of possible transformations here. So we need to adapt the testcase as we go. If there is a new test cases in TVMScript, i think we can also put it here
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
so the original condition get simplified and becomes i == 15 here
Do you mean that this condition:
tvm.tir.all(
*[
i // block_size == tvm.tir.const(3, "int32"),
i % block_size == tvm.tir.const(3, "int32"),
]
),
Was transformed to i == 15
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I took a look at the git history and the original problem which should be covered by this test was that left and right parts of condition should have the same data type. You can see detailed description in #11021. And next this test was added in #11038.
By decreasing the number of conditions in tvm.tir.all
, you prevent compiler to generate code such as lcond && rcond
. Am I right? In this case, the original problem won't be tested. Sorry if I missed something.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry I wasn't being clear, right
tvm.tir.all(
*[
i // block_size == tvm.tir.const(3, "int32"),
i % block_size == tvm.tir.const(3, "int32"),
]
)
In TensorIR schedule the ^ condition get transformed to i == 15
, as indeed that makes sense.
So we might need a different condition to test the chains.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
OK updated to a case where simplification won't happen
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM! Thank you :)
@tvm-bot rerun |
1 similar comment
@tvm-bot rerun |
This PR changes the Cast in OpenCL to always relying on convert_T to get closer to the spec and more reliable.