#pragma once #include // Utility to guaruntee complete unrolling of a loop where the bounds are known // at compile time. Various pragmas achieve similar effects, but are not as // portable across compilers. // Example: c10::ForcedUnroll<4>{}(f); is equivalent to f(0); f(1); f(2); f(3); namespace c10 { template struct ForcedUnroll { template C10_ALWAYS_INLINE void operator()(const Func& f) const { ForcedUnroll{}(f); f(n - 1); } }; template <> struct ForcedUnroll<1> { template C10_ALWAYS_INLINE void operator()(const Func& f) const { f(0); } }; } // namespace c10