Skip to content

Commit

Permalink
More logging
Browse files Browse the repository at this point in the history
  • Loading branch information
Epixu committed Oct 19, 2024
1 parent 7f95829 commit aaa8a4c
Show file tree
Hide file tree
Showing 7 changed files with 106 additions and 39 deletions.
4 changes: 2 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ if(PROJECT_IS_TOP_LEVEL OR NOT LANGULUS)

# Add Langulus::Core/Logger/RTTI libraries
fetch_langulus_module(Core GIT_TAG 76a3a5540118ec65af9cd8167342695092b8b8f2)
fetch_langulus_module(Logger GIT_TAG 054d36d787b41235593132a8d065e5a7aba70dc6)
fetch_langulus_module(RTTI GIT_TAG fab3e40e27a6aaee2eced468fed561e554d62390)
fetch_langulus_module(Logger GIT_TAG f32c2b76c2bcc32b6f36f1edda6c11378cb85b1d)
fetch_langulus_module(RTTI GIT_TAG 3836ff160ee5e221510250f1e885f3ccf6c8e28f)
endif()

# Configure SIMDe library
Expand Down
9 changes: 4 additions & 5 deletions source/Common.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,13 +47,12 @@ LANGULUS_EXCEPTION(DivisionByZero);
/// Make the rest of the code aware, that Langulus::SIMD has been included
#define LANGULUS_LIBRARY_SIMD() 1

#ifndef LANGULUS_SIMD_VERBOSE
#define LANGULUS_SIMD_VERBOSE(...) LANGULUS(NOOP)
#define LANGULUS_SIMD_VERBOSE_TAB(...) LANGULUS(NOOP)
#else
#undef LANGULUS_SIMD_VERBOSE
#if 1
#define LANGULUS_SIMD_VERBOSE(...) Logger::Info(__VA_ARGS__)
#define LANGULUS_SIMD_VERBOSE_TAB(...) const auto scoped = Logger::InfoTab(__VA_ARGS__)
#else
#define LANGULUS_SIMD_VERBOSE(...) LANGULUS(NOOP)
#define LANGULUS_SIMD_VERBOSE_TAB(...) LANGULUS(NOOP)
#endif


Expand Down
2 changes: 1 addition & 1 deletion source/Convert.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ namespace Langulus::SIMD
using T = TypeOf<R>;

if constexpr (CT::Similar<T, TO>) {
// No conversion required, just forward the register
LANGULUS_SIMD_VERBOSE("No conversion required");
return in;
}
else if constexpr (CT::SIMD128<R>) {
Expand Down
2 changes: 1 addition & 1 deletion source/binary/Multiply.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ namespace Langulus::SIMD
constexpr auto Multiply(const auto& lhs, const auto& rhs) noexcept {
return AttemptBinary<0, FORCE_OUT>(lhs, rhs,
[]<class R>(const R& l, const R& r) noexcept {
LANGULUS_SIMD_VERBOSE("Multiplying (SIMD) as ", NameOf<REGISTER>());
LANGULUS_SIMD_VERBOSE("Multiplying (SIMD) as ", NameOf<R>());
return MultiplySIMD(l, r);
},
[]<class E>(const E& l, const E& r) noexcept -> E {
Expand Down
19 changes: 16 additions & 3 deletions source/converters/From128d.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,21 @@ namespace Langulus::SIMD::Inner
/// @return the converted register
template<Element TO> NOD() LANGULUS(INLINED)
auto ConvertFrom128d(CT::SIMD128d auto v) noexcept {
if constexpr (CT::Double<TO>)
if constexpr (CT::Double<TO>) {
LANGULUS_SIMD_VERBOSE("No conversion required");
return v;
else if constexpr (CT::Float<TO>)
}
else if constexpr (CT::Float<TO>) {
LANGULUS_SIMD_VERBOSE("Converting 64bit floats -> 32bit floats");
return V128<TO> {simde_mm_cvtpd_ps(v)};
}
else if constexpr (CT::SignedInteger8<TO>) {
LANGULUS_SIMD_VERBOSE("Converting 64bit floats -> signed 8bit integers");
const V128i32 t32 {simde_mm_cvtpd_epi32(v)};
return t32.Pack().Pack();
}
else if constexpr (CT::UnsignedInteger8<TO>) {
LANGULUS_SIMD_VERBOSE("Converting 64bit floats -> unsigned 8bit integers");
#if LANGULUS_SIMD(AVX512F) and LANGULUS_SIMD(AVX512VL)
const V128u32 t32 {simde_mm_cvtpd_epu32(v)};
#else
Expand All @@ -35,27 +41,33 @@ namespace Langulus::SIMD::Inner
return t32.Pack().Pack();
}
else if constexpr (CT::SignedInteger16<TO>) {
LANGULUS_SIMD_VERBOSE("Converting 64bit floats -> signed 16bit integers");
const V128i32 t32 {simde_mm_cvtpd_epi32(v)};
return t32.Pack();
}
else if constexpr (CT::UnsignedInteger16<TO>) {
LANGULUS_SIMD_VERBOSE("Converting 64bit floats -> unsigned 16bit integers");
#if LANGULUS_SIMD(AVX512F) and LANGULUS_SIMD(AVX512VL)
const V128u32 t32 {simde_mm_cvtpd_epu32(v)};
#else
const V128u32 t32 {simde_mm_cvtpd_epi32(v)};
#endif
return t32.Pack();
}
else if constexpr (CT::SignedInteger32<TO>)
else if constexpr (CT::SignedInteger32<TO>) {
LANGULUS_SIMD_VERBOSE("Converting 64bit floats -> signed 32bit integers");
return V128<TO> {simde_mm_cvtpd_epi32(v)};
}
else if constexpr (CT::UnsignedInteger32<TO>) {
LANGULUS_SIMD_VERBOSE("Converting 64bit floats -> unsigned 32bit integers");
#if LANGULUS_SIMD(AVX512F) and LANGULUS_SIMD(AVX512VL)
return V128<TO> {simde_mm_cvtpd_epu32(v)};
#else
return V128<TO> {simde_mm_cvtpd_epi32(v)};
#endif
}
else if constexpr (CT::SignedInteger64<TO>) {
LANGULUS_SIMD_VERBOSE("Converting 64bit floats -> signed 64bit integers");
#if LANGULUS_SIMD(AVX512DQ) and LANGULUS_SIMD(AVX512VL)
return V128<TO> {simde_mm_cvtpd_epi64(v)};
#else
Expand All @@ -64,6 +76,7 @@ namespace Langulus::SIMD::Inner
#endif
}
else if constexpr (CT::UnsignedInteger64<TO>) {
LANGULUS_SIMD_VERBOSE("Converting 64bit floats -> unsigned 64bit integers");
#if LANGULUS_SIMD(AVX512DQ) and LANGULUS_SIMD(AVX512VL)
return V128<TO> {simde_mm_cvtpd_epu64(v)};
#else
Expand Down
19 changes: 16 additions & 3 deletions source/converters/From128f.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,21 @@ namespace Langulus::SIMD::Inner
/// @return the converted register
template<Element TO> NOD() LANGULUS(INLINED)
auto ConvertFrom128f(CT::SIMD128f auto v) noexcept {
if constexpr (CT::Double<TO>)
if constexpr (CT::Double<TO>) {
LANGULUS_SIMD_VERBOSE("Converting 32bit floats -> 64bit floats");
return V128<TO> {simde_mm_cvtps_pd(v)};
else if constexpr (CT::Float<TO>)
}
else if constexpr (CT::Float<TO>) {
LANGULUS_SIMD_VERBOSE("No conversion required");
return v;
}
else if constexpr (CT::SignedInteger8<TO>) {
LANGULUS_SIMD_VERBOSE("Converting 32bit floats -> signed 8bit integers");
const V128i32 t32 {simde_mm_cvtps_epi32(v)};
return t32.Pack().Pack();
}
else if constexpr (CT::UnsignedInteger8<TO>) {
LANGULUS_SIMD_VERBOSE("Converting 32bit floats -> unsigned 8bit integers");
#if LANGULUS_SIMD(AVX512F) and LANGULUS_SIMD(AVX512VL)
const V128u32 t32 {simde_mm_cvtps_epu32(v)};
#else
Expand All @@ -35,27 +41,33 @@ namespace Langulus::SIMD::Inner
return t32.Pack().Pack();
}
else if constexpr (CT::SignedInteger16<TO>) {
LANGULUS_SIMD_VERBOSE("Converting 32bit floats -> signed 16bit integers");
const V128i32 t32 {simde_mm_cvtps_epi32(v)};
return t32.Pack();
}
else if constexpr (CT::UnsignedInteger16<TO>) {
LANGULUS_SIMD_VERBOSE("Converting 32bit floats -> unsigned 16bit integers");
#if LANGULUS_SIMD(AVX512F) and LANGULUS_SIMD(AVX512VL)
const V128u32 t32 {simde_mm_cvtps_epu32(v)};
#else
const V128u32 t32 {simde_mm_cvtps_epi32(v)};
#endif
return t32.Pack();
}
else if constexpr (CT::SignedInteger32<TO>)
else if constexpr (CT::SignedInteger32<TO>) {
LANGULUS_SIMD_VERBOSE("Converting 32bit floats -> signed 32bit integers");
return V128<TO> {simde_mm_cvtps_epi32(v)};
}
else if constexpr (CT::UnsignedInteger32<TO>) {
LANGULUS_SIMD_VERBOSE("Converting 32bit floats -> unsigned 32bit integers");
#if LANGULUS_SIMD(AVX512F) and LANGULUS_SIMD(AVX512VL)
return V128<TO> {simde_mm_cvtps_epu32(v)};
#else
return V128<TO> {simde_mm_cvtps_epi32(v)};
#endif
}
else if constexpr (CT::SignedInteger64<TO>) {
LANGULUS_SIMD_VERBOSE("Converting 32bit floats -> signed 64bit integers");
#if LANGULUS_SIMD(AVX512DQ) and LANGULUS_SIMD(AVX512VL)
return V128<TO> {simde_mm_cvtps_epi64(v)};
#else
Expand All @@ -64,6 +76,7 @@ namespace Langulus::SIMD::Inner
#endif
}
else if constexpr (CT::UnsignedInteger64<TO>) {
LANGULUS_SIMD_VERBOSE("Converting 32bit floats -> unsigned 64bit integers");
#if LANGULUS_SIMD(AVX512DQ) and LANGULUS_SIMD(AVX512VL)
return V128<TO> {simde_mm_cvtps_epu64(v)};
#else
Expand Down
90 changes: 66 additions & 24 deletions source/converters/From128i.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,31 +27,37 @@ namespace Langulus::SIMD::Inner
//
if constexpr (CT::SignedInteger8<T>) {
// i8[4] -> double[4]
LANGULUS_SIMD_VERBOSE("Converting signed 8bit ints -> 64bit floats");
const auto v32 = simde_mm_cvtepi8_epi32(v);
return V128<TO> {simde_mm_cvtepi32_pd(v32)};
}
else if constexpr (CT::UnsignedInteger8<T>) {
// u8[4] -> double[4]
LANGULUS_SIMD_VERBOSE("Converting unsigned 8bit ints -> 64bit floats");
const auto v32 = simde_mm_cvtepu8_epi32(v);
return V128<TO> {simde_mm_cvtepi32_pd(v32)};
}
else if constexpr (CT::SignedInteger16<T>) {
// i16[4] -> double[4]
LANGULUS_SIMD_VERBOSE("Converting signed 16bit ints -> 64bit floats");
const auto v32 = simde_mm_cvtepi16_epi32(v);
return V128<TO> {simde_mm_cvtepi32_pd(v32)};
}
else if constexpr (CT::UnsignedInteger16<T>) {
// u16[4] -> double[4]
LANGULUS_SIMD_VERBOSE("Converting unsigned 16bit ints -> 64bit floats");
const auto v32 = simde_mm_cvtepu16_epi32(v);
return V128<TO> {simde_mm_cvtepi32_pd(v32)};
}
else if constexpr (CT::Integer32<T>) {
// i/u32[4] -> double[4]
LANGULUS_SIMD_VERBOSE("Converting 32bit ints -> 64bit floats");
return V128<TO> {simde_mm_cvtepi32_pd(v)};
}
else if constexpr (CT::SignedInteger64<T>) {
// i64[4] -> double[4]
//TODO generalize this when 512 stuff is added to SIMDe
LANGULUS_SIMD_VERBOSE("Converting signed 64bit ints -> 64bit floats");
#if LANGULUS_SIMD(AVX512DQ) and LANGULUS_SIMD(AVX512VL)
return V128<TO> {simde_mm_cvtepi64_pd(v)};
#elif LANGULUS_SIMD(256BIT)
Expand All @@ -61,6 +67,7 @@ namespace Langulus::SIMD::Inner
else if constexpr (CT::UnsignedInteger64<T>) {
// u64[4] -> double[4]
//TODO generalize this when 512 stuff is added to SIMDe
LANGULUS_SIMD_VERBOSE("Converting unsigned 64bit ints -> 64bit floats");
#if LANGULUS_SIMD(AVX512DQ) and LANGULUS_SIMD(AVX512VL)
return V128<TO> {simde_mm_cvtepu64_pd(v)};
#else
Expand All @@ -75,31 +82,37 @@ namespace Langulus::SIMD::Inner
//
if constexpr (CT::SignedInteger8<T>) {
// i8[8] -> float[8]
LANGULUS_SIMD_VERBOSE("Converting signed 8bit ints -> 32bit floats");
const auto v32 = simde_mm_cvtepi8_epi32(v);
return V128<TO> {simde_mm_cvtepi32_ps(v32)};
}
else if constexpr (CT::UnsignedInteger8<T>) {
// u8[8] -> float[8]
LANGULUS_SIMD_VERBOSE("Converting unsigned 8bit ints -> 32bit floats");
const auto v32 = simde_mm_cvtepu8_epi32(v);
return V128<TO> {simde_mm_cvtepi32_ps(v32)};
}
else if constexpr (CT::SignedInteger16<T>) {
// i16[8] -> float[8]
LANGULUS_SIMD_VERBOSE("Converting signed 16bit ints -> 32bit floats");
const auto v32 = simde_mm_cvtepi16_epi32(v);
return V128<TO> {simde_mm_cvtepi32_ps(v32)};
}
else if constexpr (CT::UnsignedInteger16<T>) {
// u16[8] -> float[8]
LANGULUS_SIMD_VERBOSE("Converting unsigned 16bit ints -> 32bit floats");
const auto v32 = simde_mm_cvtepu16_epi32(v);
return V128<TO> {simde_mm_cvtepi32_ps(v32)};
}
else if constexpr (CT::Integer32<T>) {
// i/u32[8] -> float[8]
LANGULUS_SIMD_VERBOSE("Converting 32bit ints -> 32bit floats");
return V128<TO> {simde_mm_cvtepi32_ps(v)};
}
else if constexpr (CT::SignedInteger64<T>) {
// i64[4] -> float[4]
//TODO generalize this when 512 stuff is added to SIMDe
LANGULUS_SIMD_VERBOSE("Converting signed 64bit ints -> 32bit floats");
#if LANGULUS_SIMD(AVX512DQ) and LANGULUS_SIMD(AVX512VL)
return V128<TO> {simde_mm_cvtepi64_ps(v)};
#else
Expand All @@ -110,6 +123,7 @@ namespace Langulus::SIMD::Inner
else if constexpr (CT::UnsignedInteger64<T>) {
// u64[4] -> float[4]
//TODO generalize this when 512 stuff is added to SIMDe
LANGULUS_SIMD_VERBOSE("Converting unsigned 64bit ints -> 32bit floats");
#if LANGULUS_SIMD(AVX512DQ) and LANGULUS_SIMD(AVX512VL)
return V128<TO> {simde_mm_cvtepu64_ps(v)};
#else
Expand All @@ -123,61 +137,89 @@ namespace Langulus::SIMD::Inner
//
// Converting to 8bit integer
//
if constexpr (CT::Integer8<T>)
if constexpr (CT::Integer8<T>) {
LANGULUS_SIMD_VERBOSE("No conversion required");
return V128<TO> {v};
else if constexpr (CT::Integer16<T>)
}
else if constexpr (CT::Integer16<T>) {
LANGULUS_SIMD_VERBOSE("Converting 16bit ints -> 8bit ints");
return V128<TO> {v.Pack()};
else if constexpr (CT::Integer32<T>)
}
else if constexpr (CT::Integer32<T>) {
LANGULUS_SIMD_VERBOSE("Converting 32bit ints -> 8bit ints");
return V128<TO> {v.Pack().Pack()};
else if constexpr (CT::Integer64<T>)
}
else if constexpr (CT::Integer64<T>) {
LANGULUS_SIMD_VERBOSE("Converting 64bit ints -> 8bit ints");
return V128<TO> {v.Pack().Pack().Pack()};
else
static_assert(false, "Unsupported conversion");
}
else static_assert(false, "Unsupported conversion");
}
else if constexpr (CT::Integer16<TO>) {
//
// Converting to 16bit integer
//
if constexpr (CT::Integer8<T>)
if constexpr (CT::Integer8<T>) {
LANGULUS_SIMD_VERBOSE("Converting 8bit ints -> 16bit ints");
return V128<TO> {v.UnpackLo()};
else if constexpr (CT::Integer16<T>)
}
else if constexpr (CT::Integer16<T>) {
LANGULUS_SIMD_VERBOSE("No conversion required");
return V128<TO> {v};
else if constexpr (CT::Integer32<T>)
}
else if constexpr (CT::Integer32<T>) {
LANGULUS_SIMD_VERBOSE("Converting 32bit ints -> 16bit ints");
return V128<TO> {v.Pack()};
else if constexpr (CT::Integer64<T>)
}
else if constexpr (CT::Integer64<T>) {
LANGULUS_SIMD_VERBOSE("Converting 64bit ints -> 16bit ints");
return V128<TO> {v.Pack().Pack()};
else
static_assert(false, "Unsupported conversion");
}
else static_assert(false, "Unsupported conversion");
}
else if constexpr (CT::Integer32<TO>) {
//
// Converting to 32bit integer
//
if constexpr (CT::Integer8<T>)
if constexpr (CT::Integer8<T>) {
LANGULUS_SIMD_VERBOSE("Converting 8bit ints -> 32bit ints");
return V128<TO> {v.UnpackLo().UnpackLo()};
else if constexpr (CT::Integer16<T>)
}
else if constexpr (CT::Integer16<T>) {
LANGULUS_SIMD_VERBOSE("Converting 16bit ints -> 32bit ints");
return V128<TO> {v.UnpackLo()};
else if constexpr (CT::Integer32<T>)
}
else if constexpr (CT::Integer32<T>) {
LANGULUS_SIMD_VERBOSE("No conversion required");
return V128<TO> {v};
else if constexpr (CT::Integer64<T>)
}
else if constexpr (CT::Integer64<T>) {
LANGULUS_SIMD_VERBOSE("Converting 64bit ints -> 32bit ints");
return V128<TO> {v.Pack()};
else
static_assert(false, "Unsupported conversion");
}
else static_assert(false, "Unsupported conversion");
}
else if constexpr (CT::Integer64<TO>) {
//
// Converting to 64bit integer
//
if constexpr (CT::Integer8<T>)
if constexpr (CT::Integer8<T>) {
LANGULUS_SIMD_VERBOSE("Converting 8bit ints -> 64bit ints");
return V128<TO> {v.UnpackLo().UnpackLo().UnpackLo()};
else if constexpr (CT::Integer16<T>)
}
else if constexpr (CT::Integer16<T>) {
LANGULUS_SIMD_VERBOSE("Converting 16bit ints -> 64bit ints");
return V128<TO> {v.UnpackLo().UnpackLo()};
else if constexpr (CT::Integer32<T>)
}
else if constexpr (CT::Integer32<T>) {
LANGULUS_SIMD_VERBOSE("Converting 32bit ints -> 64bit ints");
return V128<TO> {v.UnpackLo()};
else if constexpr (CT::Integer64<T>)
}
else if constexpr (CT::Integer64<T>) {
LANGULUS_SIMD_VERBOSE("No conversion required");
return V128<TO> {v};
else
static_assert(false, "Unsupported conversion");
}
else static_assert(false, "Unsupported conversion");
}
else static_assert(false, "Unsupported register");
}
Expand Down

0 comments on commit aaa8a4c

Please sign in to comment.