Add a workaround for stochastic rounding for AMD GPUs #3908
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary:
X-link: https://github.com/facebookresearch/FBGEMM/pull/997
This diff contains a workaround for the stochastic rounding issue for
the AMD GPUs.
Problem:
quantize_store
callsnearest_rounding_vector
instead ofstochastic_rounding_vector
when stochastic rounding is used becausethe
StochasticRoundingRNGState
pointer is a nullptr(https://fburl.com/code/kna14icj)
We found that the
WeightRow
constructor also gets a nullStochasticRoundingRNGState
pointer (https://fburl.com/code/vyq53lia)When
WeightRow
is instantiated, we confirm thatstochastic_rounding
istrue.
WeightRow
should receive&state
, but instead it receives anullptr. (https://fburl.com/code/o3kxgt4z)
We suspect that the compiler might have optimized out the
StochasticRoundingRNGState
since it is only passed toWeightRow
and not utilized anywhere else in the caller kernel.
Workaround:
We move the
StochasticRoundingRNGState
storage inside theWeightRow
struct and pass a boolean to theWeightRow
constructorinstead.
Differential Revision: D72201618