-
Notifications
You must be signed in to change notification settings - Fork 3.8k
Support integer type input for log and log2 #18426
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
Conversation
Convert integer inputs to float32 for log and log2 functions.
Summary of ChangesHello @jikechao, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request enhances the Highlights
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
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.
Code Review
This pull request adds support for integer inputs to topi.log and topi.log2 by casting them to float32, which is a good improvement for usability and consistency with libraries like NumPy. The implementation correctly moves the elemwise tag from a decorator to the final te.compute call, which is good practice for avoiding issues with nested tag scopes. My review includes suggestions to also tag the intermediate cast operations as elemwise to ensure they can be fused by the scheduler, which is important for performance.
| """ | ||
| return te.compute(x.shape, lambda *i: te.log(x(*i))) | ||
| if x.dtype.startswith("int"): | ||
| x = te.compute(x.shape, lambda *i: x(*i).astype("float32")) |
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.
The intermediate te.compute for casting should be tagged as elemwise to allow for operator fusion. Without this tag, the cast operation might not be inlined, potentially leading to suboptimal performance.
| x = te.compute(x.shape, lambda *i: x(*i).astype("float32")) | |
| x = te.compute(x.shape, lambda *i: x(*i).astype("float32"), tag=tag.ELEMWISE) |
| """ | ||
| return te.compute(x.shape, lambda *i: te.log2(x(*i))) | ||
| if x.dtype.startswith("int"): | ||
| x = te.compute(x.shape, lambda *i: x(*i).astype("float32")) |
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.
Similar to the log function, the intermediate te.compute for casting here should be tagged as elemwise to enable operator fusion. This ensures that the cast can be inlined by the scheduler.
| x = te.compute(x.shape, lambda *i: x(*i).astype("float32")) | |
| x = te.compute(x.shape, lambda *i: x(*i).astype("float32"), tag=tag.ELEMWISE) |
Adds support for integer inputs in
topi.logandtopi.log2by automatically converting them to float32, aligning with NumPy's implicit float promotion behavior.Fix #18425