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

[!680] [CI] Compile the expensive tests with avx again.

Merge branch 'ensure-avx-test' into 'master'

ref:core/dune-common Closes: [#165]

WIP:

-   [x] ensure the Vc vector types really turn out to have the expected size
    (well, we check Vc implementation, but close enough)

See merge request [core/dune-common!680]

  [#165]: gitlab.dune-project.org/NoneNone/issues/165
  [core/dune-common!680]: gitlab.dune-project.org/core/dune-common/merge_requests/680


Closes #165
parents eb5fb4b8 8543d148
Branches
Tags
1 merge request!680[CI] Compile the expensive tests with avx again.
Pipeline #19086 passed
......@@ -8,6 +8,7 @@ before_script:
variables:
DUNECI_TEST_LABELS: quick
DUNE_TEST_EXPECTED_VC_IMPLEMENTATION: SSE2
debian:10 gcc-7-14--expensive:
# This image has Vc
......@@ -15,8 +16,10 @@ debian:10 gcc-7-14--expensive:
script: duneci-standard-test
# allow expensive tests
variables:
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.
Please register or to comment