/usr/local/lib64/python3.6/site-packages/torch/include/c10/core
NameSizeModeActions
impl/-0755rm
Allocator.h87250644editdlrm
AutogradState.h9940644editdlrm
Backend.h84870644editdlrm
CompileTimeFunctionPointer.h16770644editdlrm
CopyBytes.h12290644editdlrm
CPUAllocator.h22670644editdlrm
DefaultDtype.h3940644editdlrm
DefaultTensorOptions.h10320644editdlrm
Device.h53960644editdlrm
DeviceGuard.h75550644editdlrm
DeviceType.h29940644editdlrm
DispatchKey.h180690644editdlrm
DispatchKeySet.h129510644editdlrm
Event.h41690644editdlrm
GeneratorImpl.h37130644editdlrm
GradMode.h12610644editdlrm
InferenceMode.h34710644editdlrm
Layout.h12250644editdlrm
MemoryFormat.h85710644editdlrm
OptionalRef.h5210644editdlrm
QEngine.h8610644editdlrm
QScheme.h15620644editdlrm
Scalar.h60190644editdlrm
ScalarType.h170730644editdlrm
ScalarTypeToTypeMeta.h13650644editdlrm
Storage.h43690644editdlrm
StorageImpl.h56100644editdlrm
Stream.h73730644editdlrm
StreamGuard.h63150644editdlrm
TensorImpl.h961520644editdlrm
TensorOptions.h275930644editdlrm
thread_pool.h29920644editdlrm
UndefinedTensorImpl.h9110644editdlrm
WrapDimMinimal.h8050644editdlrm
Edit: /usr/local/lib64/python3.6/site-packages/torch/include/c10/core/GeneratorImpl.h (3713B)
#pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include /** * Note [Generator] * ~~~~~~~~~~~~~~~~ * A Pseudo Random Number Generator (PRNG) is an engine that uses an algorithm * to generate a seemingly random sequence of numbers, that may be later be used * in creating a random distribution. Such an engine almost always maintains a * state and requires a seed to start off the creation of random numbers. Often * times, users have found it beneficial to be able to explicitly create, * retain, and destroy PRNG states and also be able to have control over the * seed value. * * A Generator in ATen gives users the ability to read, write and modify a PRNG * engine. For instance, it does so by letting users seed a PRNG engine, fork * the state of the engine, etc. * * By default, there is one generator per device, and a device's generator is * lazily created. A user can use the torch.Generator() api to create their own * generator. Currently torch.Generator() can only create a CPUGeneratorImpl. */ /** * Note [Acquire lock when using random generators] * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Generator and its derived classes are NOT thread-safe. Please note that most * of the places where we have inserted locking for generators are historically * based, and we haven't actually checked that everything is truly thread safe * (and it probably isn't). Please use the public mutex_ when using any methods * from these classes, except for the read-only methods. You can learn about the * usage by looking into the unittests (aten/src/ATen/cpu_generator_test.cpp) * and other places where we have used lock_guard. * * TODO: Look into changing the threading semantics of Generators in ATen (e.g., * making them non-thread safe and instead making the generator state * splittable, to accommodate forks into other threads). */ namespace c10 { // The default seed is selected to be a large number // with good distribution of 0s and 1s in bit representation constexpr uint64_t default_rng_seed_val = 67280421310721; struct C10_API GeneratorImpl : public c10::intrusive_ptr_target { // Constructors GeneratorImpl(Device device_in, DispatchKeySet key_set); // Delete all copy and move assignment in favor of clone() // method GeneratorImpl(const GeneratorImpl& other) = delete; GeneratorImpl(GeneratorImpl&& other) = delete; GeneratorImpl& operator=(const GeneratorImpl& other) = delete; virtual ~GeneratorImpl() = default; c10::intrusive_ptr clone() const; // Common methods for all generators virtual void set_current_seed(uint64_t seed) = 0; virtual uint64_t current_seed() const = 0; virtual uint64_t seed() = 0; virtual void set_state(const c10::TensorImpl& new_state) = 0; virtual c10::intrusive_ptr get_state() const = 0; Device device() const; // See Note [Acquire lock when using random generators] std::mutex mutex_; DispatchKeySet key_set() const { return key_set_; } inline void set_pyobj(PyObject* pyobj) noexcept { pyobj_ = pyobj; } inline PyObject* pyobj() const noexcept { return pyobj_; } protected: Device device_; DispatchKeySet key_set_; PyObject* pyobj_ = nullptr; virtual GeneratorImpl* clone_impl() const = 0; }; namespace detail { TORCH_API uint64_t getNonDeterministicRandom(bool is_cuda = false); } // namespace detail } // namespace c10