From c45c0c4420d769ed61cc55fe5b5ebb5c3b45d6e2 Mon Sep 17 00:00:00 2001 From: Alejandro Gallo Date: Wed, 1 Sep 2021 21:30:02 +0200 Subject: [PATCH] Update benches --- bench/.gitignore | 1 + bench/hauta.h | 67 +++++++++++++++++++++++++++++++++++++ bench/test_main.cxx | 30 ++++++++++++++++- etc/{ => make}/ctf.mk | 0 etc/{ => make}/ctf_rules.mk | 0 etc/{ => make}/ctf_vars.mk | 0 etc/{ => make}/emacs.mk | 0 7 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 bench/.gitignore create mode 100644 bench/hauta.h rename etc/{ => make}/ctf.mk (100%) rename etc/{ => make}/ctf_rules.mk (100%) rename etc/{ => make}/ctf_vars.mk (100%) rename etc/{ => make}/emacs.mk (100%) diff --git a/bench/.gitignore b/bench/.gitignore new file mode 100644 index 0000000..2f3ef05 --- /dev/null +++ b/bench/.gitignore @@ -0,0 +1 @@ +test_main diff --git a/bench/hauta.h b/bench/hauta.h new file mode 100644 index 0000000..b7e6cc7 --- /dev/null +++ b/bench/hauta.h @@ -0,0 +1,67 @@ +#pragma once + +#include +#include +#include +#include + +#define INSTANTIATE_OPTION(__type, __reader) \ + template <> __type option(Args &as, Flag &f) { \ + auto const v(option(as, f)); \ + return __reader(v.c_str()); \ + } + +namespace hauta { + typedef const std::string Flag; + typedef std::string Arg; + typedef const std::vector Args; + + bool isFlagPresent(Args &a, Flag &f) { + return std::find(a.begin(), a.end(), f) != a.end(); + } + + // option + template F option(Args &args, Flag &f); + + template<> std::string option(Args &a, Flag &f) { + const auto it(std::find(a.begin(), a.end(), f)); + if (!isFlagPresent(a, f)) { + std::cerr << "Expecting flag " << f << "\n"; + throw ""; + } + return std::string(*(it+1)); + } + + INSTANTIATE_OPTION(size_t, std::atoi) + INSTANTIATE_OPTION(int, std::atoi) + INSTANTIATE_OPTION(double, std::atof) + INSTANTIATE_OPTION(float, std::atof) + + template<> bool option(Args &a, Flag &f) { return isFlagPresent(a, f); } + + template F option(Args &args, Flag &f, F const def) { + return isFlagPresent(args, f) + ? option(args, f) + : def + ; + } + + template<> bool option(Args &args, Flag &f, bool const def) { + return isFlagPresent(args, f) + ? !def + : def + ; + } + + template + F option(int argc, char **argv, Flag& f, const F def) { + return option(Args {argv, argv + argc}, f, def); + } + template + F option(int argc, char **argv, Flag& f) { + return option(Args {argv, argv + argc}, f); + } + +} + +#undef INSTANTIATE_OPTION diff --git a/bench/test_main.cxx b/bench/test_main.cxx index a160aaa..e06dcc4 100644 --- a/bench/test_main.cxx +++ b/bench/test_main.cxx @@ -1,6 +1,34 @@ #include +#include +#include +#include + +int main(int argc, char** argv) { + MPI_Init(&argc, &argv); + CTF::World world(argc, argv); + + const int no(hauta::option(argc, argv, "--no")) + , nv(hauta::option(argc, argv, "--nv")) + ; + + std::vector symmetries(4, NS) + , vo({nv, no}) + , vvoo({nv, nv, no, no}) + , ooov({no, no, no, nv}) + , vvvo({nv, nv, nv, no}) + ; + + CTF::Tensor + ei(1, ooov.data(), symmetries.data(), world) + , ea(1, vo.data(), symmetries.data(), world) + , Tph(2, vo.data(), symmetries.data(), world) + , Tpphh(4, vvoo.data(), symmetries.data(), world) + , Vpphh(4, vvoo.data(), symmetries.data(), world) + , Vhhhp(4, ooov.data(), symmetries.data(), world) + , Vppph(4, vvvo.data(), symmetries.data(), world) + ; -int main() { std::cout << "Hello world" << std::endl; + MPI_Finalize(); return 0; } diff --git a/etc/ctf.mk b/etc/make/ctf.mk similarity index 100% rename from etc/ctf.mk rename to etc/make/ctf.mk diff --git a/etc/ctf_rules.mk b/etc/make/ctf_rules.mk similarity index 100% rename from etc/ctf_rules.mk rename to etc/make/ctf_rules.mk diff --git a/etc/ctf_vars.mk b/etc/make/ctf_vars.mk similarity index 100% rename from etc/ctf_vars.mk rename to etc/make/ctf_vars.mk diff --git a/etc/emacs.mk b/etc/make/emacs.mk similarity index 100% rename from etc/emacs.mk rename to etc/make/emacs.mk