#pragma once #include <c10/macros/Macros.h> #include <cstring> namespace c10 { namespace detail { template <typename T> struct LoadImpl { C10_HOST_DEVICE static T apply(const void* src) { return *reinterpret_cast<const T*>(src); } }; template <> struct LoadImpl<bool> { C10_HOST_DEVICE static bool apply(const void* src) { static_assert(sizeof(bool) == sizeof(char)); // NOTE: [Loading boolean values] // Protect against invalid boolean values by loading as a byte // first, then converting to bool (see gh-54789). return *reinterpret_cast<const unsigned char*>(src); } }; } // namespace detail template <typename T> C10_HOST_DEVICE T load(const void* src) { return c10::detail::LoadImpl<T>::apply(src); } template <typename scalar_t> C10_HOST_DEVICE scalar_t load(const scalar_t* src) { return c10::detail::LoadImpl<scalar_t>::apply(src); } } // namespace c10
Memory