| #define TORCH_ASSERT_NO_OPERATORS |
| #include <ATen/Dispatch.h> |
| #include <ATen/cuda/CUDAApplyUtils.cuh> |
| #include <ATen/AccumulateType.h> |
| #include <ATen/cuda/CUDAGeneratorImpl.h> |
| #include <ATen/native/UnaryOps.h> |
| #include <ATen/native/cuda/DistributionTemplates.h> |
| |
| #include <curand.h> |
| #include <curand_kernel.h> |
| #include <curand_philox4x32_x.h> |
| #include <utility> |
| #include <functional> |
| |
| #include <ATen/native/Distributions.h> |
| #include <ATen/native/cuda/Loops.cuh> |
| #include <ATen/native/TensorIterator.h> |
| |
| #include <cstdint> |
| #include <limits> |
| #include <utility> |
| #include <type_traits> |
| |
| namespace at::native { |
| |
| void bernoulli_tensor_kernel(const TensorBase &self, const TensorBase &p_, const std::optional<Generator>& gen_) { |
| auto generator = get_generator_or_default<CUDAGeneratorImpl>(gen_, cuda::detail::getDefaultCUDAGenerator()); |
| at::native::templates::cuda::bernoulli_kernel(self, p_, generator); |
| } |
| |
| void bernoulli_scalar_kernel(const TensorBase &self, double p, const std::optional<Generator>& gen) { |
| auto iter = TensorIterator::borrowing_nullary_op(self); |
| auto generator = get_generator_or_default<CUDAGeneratorImpl>(gen, cuda::detail::getDefaultCUDAGenerator()); |
| at::native::templates::cuda::bernoulli_kernel(iter, p, generator); |
| } |
| |
| REGISTER_DISPATCH(bernoulli_tensor_stub, &bernoulli_tensor_kernel); |
| REGISTER_DISPATCH(bernoulli_scalar_stub, &bernoulli_scalar_kernel); |
| |
| } // namespace at::native |