ConvolutedDog opened a new pull request, #19565:
URL: https://github.com/apache/tvm/pull/19565

   Fix CUDA lowering of standard TIR math intrinsics so they use precise CUDA 
math functions by default instead of fast-math `__*f` functions.  This fixes 
the default behavior reported in #19546, where operators such as `tirx.exp` 
could lower to `__expf` even though fast math was not explicitly requested.
   
   This change adds a CUDA target attribute, `enable_fast_math`, which defaults 
to `false`.  When the attribute is unset or false, standard math intrinsics 
lower through the normal CUDA math rule, for example `expf`, `logf`, `sinf`, 
`cosf`, `powf`, and `rsqrtf` for `float32`.  When users explicitly enable the 
attribute on the target, the lowering pass also checks the 
`cuda.fastmath.FLowerIntrinsic` rules before the normal CUDA lowering rules.
   
   Users can opt in to fast math by constructing a CUDA target with the 
attribute:
   
   ```py
   tvm.target.Target({"kind": "cuda", "enable_fast_math": True})
   target = tvm.target.Target({
       "tag": "nvidia/nvidia-a100",
       "enable_fast_math": True,
   })
   ```
   
   The fast-math lowering path currently covers the CUDA math operators 
registered with `cuda.fastmath.FLowerIntrinsic`: `tirx.exp`, `tirx.exp10`, 
`tirx.log`, `tirx.log2`, `tirx.log10`, `tirx.tan`, `tirx.cos`, `tirx.sin`, 
`tirx.tanh`, and `tirx.pow`.
   
   `tirx.rsqrt` is also registered for CUDA lowering so it maps to the CUDA 
reciprocal-square-root intrinsic instead of being legalized as `1 / sqrt(x)`.
   
   Add CUDA codegen tests 
`tests/python/codegen/test_target_codegen_cuda_fastmath.py` that check the 
lowered IR, generated CUDA source, and runtime results for the supported math 
intrinsics across floating point dtypes and both default and fast-math targets.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to