Skip to content
Snippets Groups Projects
Commit aba26a3c authored by Jö Fahlke's avatar Jö Fahlke
Browse files

Ensure Vc uses the implementation we expect from our compiler flags

parent d4c5796c
No related branches found
No related tags found
1 merge request!680[CI] Compile the expensive tests with avx again.
Pipeline #19067 passed
......@@ -18,6 +18,7 @@ debian:10 gcc-7-14--expensive:
DUNECI_CXXFLAGS: -mavx
DUNECI_TEST_LABELS: ""
DUNECI_TOOLCHAIN: gcc-7-14
DUNE_TEST_EXPECTED_VC_IMPLEMENTATION: AVX
# require AVX to properly test Vc
tags: [duneci, "iset:avx"]
# allowed to fail to e.g. do no hold up a merge when a runner supporting avx
......
......@@ -412,6 +412,12 @@ dune_add_test(SOURCES varianttest.cc
LINK_LIBRARIES dunecommon
LABELS quick)
dune_add_test(SOURCES vcexpectedimpltest.cc
LINK_LIBRARIES dunecommon
LABELS quick
CMAKE_GUARD Vc_FOUND)
add_dune_vc_flags(vcexpectedimpltest)
install(
FILES
arithmetictestsuite.hh
......
#include "config.h"
#if !HAVE_VC
#error Inconsistent buildsystem. This program should not be built in the \
absence of Vc.
#endif
#include <cstdlib>
#include <map>
#include <iostream>
#include <string>
#include <dune/common/exceptions.hh>
#include <dune/common/vc.hh>
const std::map<Vc::Implementation, std::string> impl_names = {
{Vc::ScalarImpl, "Scalar" },
{Vc::SSE2Impl, "SSE2" },
{Vc::SSE3Impl, "SSE3" },
{Vc::SSSE3Impl, "SSSE3" },
{Vc::SSE41Impl, "SSE41" },
{Vc::SSE42Impl, "SSE42" },
{Vc::AVXImpl, "AVX" },
{Vc::AVX2Impl, "AVX2" },
{Vc::MICImpl, "MIC" },
};
const std::string expected_var = "DUNE_TEST_EXPECTED_VC_IMPLEMENTATION";
int main()
{
auto p = impl_names.find(Vc::CurrentImplementation::current());
if(p == impl_names.end())
DUNE_THROW(Dune::NotImplemented, "Unexpected current implementation value "
<< Vc::CurrentImplementation::current());
auto current_impl = p->second;
std::cout << "The current Vc implementation is " << current_impl
<< std::endl;
std::string expected_impl;
if(auto env_impl = std::getenv(expected_var.c_str()))
expected_impl = env_impl;
if(expected_impl.empty())
{
std::cerr << "No expected vc imlementation provided, skipping test\n"
<< "Please set " << expected_var
<< " environment variable to one of the following values:";
for(const auto &item : impl_names)
std::cerr << ' ' << item.second;
std::cerr << std::endl;
return 77;
}
std::cout << "The expected Vc implementation is " << expected_impl
<< std::endl;
if(current_impl == expected_impl) {
std::cout << "OK: Current and expected Vc implementation match"
<< std::endl;
return 0;
}
else {
std::cout << "Error: Current Vc implementation does not match expected"
<< std::endl;
return 1;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment