Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Question: mipp::set<1> (NO_INTRINSICS) is undefined #44

Open
SpaceView opened this issue Jul 8, 2022 · 0 comments
Open

Question: mipp::set<1> (NO_INTRINSICS) is undefined #44

SpaceView opened this issue Jul 8, 2022 · 0 comments
Labels

Comments

@SpaceView
Copy link

In MIPP\tests\src\bitwise_operations\xorb.cpp, I was trying to test this function,


template <typename T>
void test_msk_xorb()
{
	constexpr int N = mipp::N<T>();
	bool inputs1[N], inputs2[N];
	std::mt19937 g;
	std::uniform_int_distribution<uint16_t> dis(0, 1);

	for (auto t = 0; t < 100; t++)
	{
		for (auto i = 0; i < N; i++)
		{
			inputs1[i] = dis(g) ? true : false;
			inputs2[i] = dis(g) ? true : false;
		}

		std::shuffle(inputs1, inputs1 + mipp::N<T>(), g);
		std::shuffle(inputs2, inputs2 + mipp::N<T>(), g);

		mipp::msk m1 = mipp::set<N>(inputs1);
		mipp::msk m2 = mipp::set<N>(inputs2);
		mipp::msk m3 = mipp::xorb<N>(m1, m2);

		mipp::reg r = mipp::toreg<N>(m3);

		for (auto i = 0; i < N; i++)
		{
			bool res = inputs1[i] ^ inputs2[i];

			if (res)
				REQUIRE(mipp::get<T>(r, i) != (T)0);
			else
				REQUIRE(mipp::get<T>(r, i) == (T)res);
		}
	}
}

So I add a few lines into the test line,

TEST_CASE("Binary xor - mipp::Msk", "[mipp::xorb]")
{
#if defined(MIPP_64BIT)
	SECTION("datatype = int64_t") { test_Msk_xorb<int64_t>(); }
#endif
	SECTION("datatype = int32_t") { test_Msk_xorb<int32_t>(); }
#if defined(MIPP_BW)
	SECTION("datatype = int16_t") { test_Msk_xorb<int16_t>(); }
	SECTION("datatype = int8_t") { test_Msk_xorb<int8_t>(); }
#endif

#if defined(MIPP_64BIT)
	SECTION("datatype = int64_t") { test_msk_xorb<int64_t>(); }
#endif
	SECTION("datatype = int32_t") { test_msk_xorb<int32_t>(); }
#if defined(MIPP_BW)
	SECTION("datatype = int16_t") { test_msk_xorb<int16_t>(); }
	SECTION("datatype = int8_t") { test_msk_xorb<int8_t>(); }
#endif
}

However I got the following error info at runtime,

MIPP tests
----------

Instr. type:       NO
Instr. full type:  NO_INTRINSICS
Instr. version:    1
Instr. size:       0 bits
Instr. lanes:      1
64-bit support:    yes
Byte/word support: yes


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
run_tests.exe is a Catch v2.2.2 host application.
Run with -? for options

-------------------------------------------------------------------------------
Binary xor - mipp::Msk
  datatype = int64_t
-------------------------------------------------------------------------------
E:\vLIBS\MIPP\tests\src\bitwise_operations\xorb.cpp(174)
...............................................................................

E:\vLIBS\MIPP\tests\src\bitwise_operations\xorb.cpp(174): FAILED:
due to unexpected exception with message:
  mipp::set<1> (NO_INTRINSICS) is undefined!, try to add -mfpu=neon-vfpv4, -
  msse4.2, -mavx, -march=native... at the compile time.

-------------------------------------------------------------------------------
Binary xor - mipp::Msk
  datatype = int32_t
-------------------------------------------------------------------------------
E:\vLIBS\MIPP\tests\src\bitwise_operations\xorb.cpp(176)
...............................................................................

E:\vLIBS\MIPP\tests\src\bitwise_operations\xorb.cpp(176): FAILED:
due to unexpected exception with message:
  mipp::set<1> (NO_INTRINSICS) is undefined!, try to add -mfpu=neon-vfpv4, -
  msse4.2, -mavx, -march=native... at the compile time.

-------------------------------------------------------------------------------
Binary xor - mipp::Msk
  datatype = int16_t
-------------------------------------------------------------------------------
E:\vLIBS\MIPP\tests\src\bitwise_operations\xorb.cpp(178)
...............................................................................

E:\vLIBS\MIPP\tests\src\bitwise_operations\xorb.cpp(178): FAILED:
due to unexpected exception with message:
  mipp::set<1> (NO_INTRINSICS) is undefined!, try to add -mfpu=neon-vfpv4, -
  msse4.2, -mavx, -march=native... at the compile time.

-------------------------------------------------------------------------------
Binary xor - mipp::Msk
  datatype = int8_t
-------------------------------------------------------------------------------
E:\vLIBS\MIPP\tests\src\bitwise_operations\xorb.cpp(179)
...............................................................................

E:\vLIBS\MIPP\tests\src\bitwise_operations\xorb.cpp(179): FAILED:
due to unexpected exception with message:
  mipp::set<1> (NO_INTRINSICS) is undefined!, try to add -mfpu=neon-vfpv4, -
  msse4.2, -mavx, -march=native... at the compile time.

===============================================================================
test cases:   123 |   122 passed | 1 failed
assertions: 10353 | 10349 passed | 4 failed

It seems mipp::set<1> is not defined, but in mipp.h I can clearly see that the set function is defined as,

template <typename T> inline reg   set          (const T[nElReg<T>()])            { errorMessage<T>("set");           exit(-1); }
#ifdef _MSC_VER
template <int      N> inline msk   set          (const bool[])                    { errorMessage<N>("set");           exit(-1); }
#else
template <int      N> inline msk   set          (const bool[N])                   { errorMessage<N>("set");           exit(-1); }
#endif

I add the command "-mfpu=neon-vfpv4" to msvc2019 compiler, it seems doesn't help at all.
Could anybody give some explanation about this?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants