mirror of
https://github.com/paboyle/Grid.git
synced 2024-11-10 07:55:35 +00:00
commit
f0aed4672e
3
.gitignore
vendored
3
.gitignore
vendored
@ -94,8 +94,7 @@ Thumbs.db
|
|||||||
|
|
||||||
# build directory #
|
# build directory #
|
||||||
###################
|
###################
|
||||||
build/*
|
build*/*
|
||||||
build_debug/*
|
|
||||||
|
|
||||||
# IDE related files #
|
# IDE related files #
|
||||||
#####################
|
#####################
|
||||||
|
@ -65,7 +65,10 @@ inline uint64_t cyclecount(void){
|
|||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
#elif defined __x86_64__
|
#elif defined __x86_64__
|
||||||
|
#include <immintrin.h>
|
||||||
|
#ifndef __INTEL_COMPILER
|
||||||
#include <x86intrin.h>
|
#include <x86intrin.h>
|
||||||
|
#endif
|
||||||
inline uint64_t cyclecount(void){
|
inline uint64_t cyclecount(void){
|
||||||
return __rdtsc();
|
return __rdtsc();
|
||||||
}
|
}
|
||||||
|
@ -75,7 +75,7 @@ namespace Grid {
|
|||||||
|
|
||||||
std::seed_seq src;
|
std::seed_seq src;
|
||||||
|
|
||||||
fixedSeed(std::vector<int> &seeds) : src(seeds.begin(),seeds.end()) {};
|
fixedSeed(const std::vector<int> &seeds) : src(seeds.begin(),seeds.end()) {};
|
||||||
|
|
||||||
result_type operator () (void){
|
result_type operator () (void){
|
||||||
|
|
||||||
@ -119,9 +119,10 @@ namespace Grid {
|
|||||||
typedef uint32_t RngStateType;
|
typedef uint32_t RngStateType;
|
||||||
static const int RngStateCount = std::mt19937::state_size;
|
static const int RngStateCount = std::mt19937::state_size;
|
||||||
#endif
|
#endif
|
||||||
std::vector<RngEngine> _generators;
|
std::vector<RngEngine> _generators;
|
||||||
std::vector<std::uniform_real_distribution<RealD> > _uniform;
|
std::vector<std::uniform_real_distribution<RealD>> _uniform;
|
||||||
std::vector<std::normal_distribution<RealD> > _gaussian;
|
std::vector<std::normal_distribution<RealD>> _gaussian;
|
||||||
|
std::vector<std::discrete_distribution<RealD>> _bernoulli;
|
||||||
|
|
||||||
void GetState(std::vector<RngStateType> & saved,int gen) {
|
void GetState(std::vector<RngStateType> & saved,int gen) {
|
||||||
saved.resize(RngStateCount);
|
saved.resize(RngStateCount);
|
||||||
@ -161,6 +162,7 @@ namespace Grid {
|
|||||||
_generators.resize(1);
|
_generators.resize(1);
|
||||||
_uniform.resize(1,std::uniform_real_distribution<RealD>{0,1});
|
_uniform.resize(1,std::uniform_real_distribution<RealD>{0,1});
|
||||||
_gaussian.resize(1,std::normal_distribution<RealD>(0.0,1.0) );
|
_gaussian.resize(1,std::normal_distribution<RealD>(0.0,1.0) );
|
||||||
|
_bernoulli.resize(1,std::discrete_distribution<RealD>{1,1});
|
||||||
_seeded=0;
|
_seeded=0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -242,7 +244,7 @@ namespace Grid {
|
|||||||
std::random_device rd;
|
std::random_device rd;
|
||||||
Seed(rd);
|
Seed(rd);
|
||||||
}
|
}
|
||||||
void SeedFixedIntegers(std::vector<int> &seeds){
|
void SeedFixedIntegers(const std::vector<int> &seeds){
|
||||||
fixedSeed src(seeds);
|
fixedSeed src(seeds);
|
||||||
Seed(src);
|
Seed(src);
|
||||||
}
|
}
|
||||||
@ -266,6 +268,7 @@ namespace Grid {
|
|||||||
_generators.resize(_vol);
|
_generators.resize(_vol);
|
||||||
_uniform.resize(_vol,std::uniform_real_distribution<RealD>{0,1});
|
_uniform.resize(_vol,std::uniform_real_distribution<RealD>{0,1});
|
||||||
_gaussian.resize(_vol,std::normal_distribution<RealD>(0.0,1.0) );
|
_gaussian.resize(_vol,std::normal_distribution<RealD>(0.0,1.0) );
|
||||||
|
_bernoulli.resize(_vol,std::discrete_distribution<RealD>{1,1});
|
||||||
_seeded=0;
|
_seeded=0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -354,7 +357,7 @@ PARALLEL_FOR_LOOP
|
|||||||
std::random_device rd;
|
std::random_device rd;
|
||||||
Seed(rd);
|
Seed(rd);
|
||||||
}
|
}
|
||||||
void SeedFixedIntegers(std::vector<int> &seeds){
|
void SeedFixedIntegers(const std::vector<int> &seeds){
|
||||||
fixedSeed src(seeds);
|
fixedSeed src(seeds);
|
||||||
Seed(src);
|
Seed(src);
|
||||||
}
|
}
|
||||||
@ -369,13 +372,21 @@ PARALLEL_FOR_LOOP
|
|||||||
rng.fill(l,rng._gaussian);
|
rng.fill(l,rng._gaussian);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <class vobj> inline void bernoulli(GridParallelRNG &rng,Lattice<vobj> &l){
|
||||||
|
rng.fill(l,rng._bernoulli);
|
||||||
|
}
|
||||||
|
|
||||||
template <class sobj> inline void random(GridSerialRNG &rng,sobj &l){
|
template <class sobj> inline void random(GridSerialRNG &rng,sobj &l){
|
||||||
rng.fill(l,rng._uniform);
|
rng.fill(l,rng._uniform);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class sobj> inline void gaussian(GridSerialRNG &rng,sobj &l){
|
template <class sobj> inline void gaussian(GridSerialRNG &rng,sobj &l){
|
||||||
rng.fill(l,rng._gaussian);
|
rng.fill(l,rng._gaussian);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <class sobj> inline void bernoulli(GridSerialRNG &rng,sobj &l){
|
||||||
|
rng.fill(l,rng._bernoulli);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -383,7 +383,6 @@ namespace QCD {
|
|||||||
//////////////////////////////////////////////
|
//////////////////////////////////////////////
|
||||||
// Poke scalars
|
// Poke scalars
|
||||||
//////////////////////////////////////////////
|
//////////////////////////////////////////////
|
||||||
|
|
||||||
template<class vobj> void pokeSpin(vobj &lhs,const decltype(peekIndex<SpinIndex>(lhs,0)) & rhs,int i)
|
template<class vobj> void pokeSpin(vobj &lhs,const decltype(peekIndex<SpinIndex>(lhs,0)) & rhs,int i)
|
||||||
{
|
{
|
||||||
pokeIndex<SpinIndex>(lhs,rhs,i);
|
pokeIndex<SpinIndex>(lhs,rhs,i);
|
||||||
@ -407,6 +406,40 @@ namespace QCD {
|
|||||||
pokeIndex<LorentzIndex>(lhs,rhs,i);
|
pokeIndex<LorentzIndex>(lhs,rhs,i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//////////////////////////////////////////////
|
||||||
|
// Fermion <-> propagator assignements
|
||||||
|
//////////////////////////////////////////////
|
||||||
|
template <class Prop, class Ferm>
|
||||||
|
void FermToProp(Prop &p, const Ferm &f, const int s, const int c)
|
||||||
|
{
|
||||||
|
for(int j = 0; j < Ns; ++j)
|
||||||
|
{
|
||||||
|
auto pjs = peekSpin(p, j, s);
|
||||||
|
auto fj = peekSpin(f, j);
|
||||||
|
|
||||||
|
for(int i = 0; i < Nc; ++i)
|
||||||
|
{
|
||||||
|
pokeColour(pjs, peekColour(fj, i), i, c);
|
||||||
|
}
|
||||||
|
pokeSpin(p, pjs, j, s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class Prop, class Ferm>
|
||||||
|
void PropToFerm(Ferm &f, const Prop &p, const int s, const int c)
|
||||||
|
{
|
||||||
|
for(int j = 0; j < Ns; ++j)
|
||||||
|
{
|
||||||
|
auto pjs = peekSpin(p, j, s);
|
||||||
|
auto fj = peekSpin(f, j);
|
||||||
|
|
||||||
|
for(int i = 0; i < Nc; ++i)
|
||||||
|
{
|
||||||
|
pokeColour(fj, peekColour(pjs, i, c), i);
|
||||||
|
}
|
||||||
|
pokeSpin(f, fj, j);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////
|
//////////////////////////////////////////////
|
||||||
// transpose array and scalar
|
// transpose array and scalar
|
||||||
|
@ -32,6 +32,22 @@ Author: Peter Boyle <paboyle@ph.ed.ac.uk>
|
|||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
|
|
||||||
namespace Grid {
|
namespace Grid {
|
||||||
|
// helper function to read space-separated values
|
||||||
|
template <typename T>
|
||||||
|
std::vector<T> strToVec(const std::string s)
|
||||||
|
{
|
||||||
|
std::istringstream sstr(s);
|
||||||
|
T buf;
|
||||||
|
std::vector<T> v;
|
||||||
|
|
||||||
|
while(!sstr.eof())
|
||||||
|
{
|
||||||
|
sstr >> buf;
|
||||||
|
v.push_back(buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
class Serializable {};
|
class Serializable {};
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
bin_PROGRAMS = Test_GaugeAction Test_RectPlaq Test_cayley_cg Test_cayley_coarsen_support Test_cayley_even_odd Test_cayley_ldop_cr Test_cf_coarsen_support Test_cf_cr_unprec Test_cheby Test_contfrac_cg Test_contfrac_even_odd Test_contfrac_force Test_cshift Test_cshift_red_black Test_cshift_red_black_rotate Test_cshift_rotate Test_dwf_cg_prec Test_dwf_cg_schur Test_dwf_cg_unprec Test_dwf_cr_unprec Test_dwf_even_odd Test_dwf_force Test_dwf_fpgcr Test_dwf_gpforce Test_dwf_hdcr Test_dwf_lanczos Test_dwf_rb5d Test_gamma Test_gp_rect_force Test_gparity Test_gpdwf_force Test_gpwilson_even_odd Test_hmc_EODWFRatio Test_hmc_EODWFRatio_Gparity Test_hmc_EOWilsonFermionGauge Test_hmc_EOWilsonRatio Test_hmc_GparityIwasakiGauge Test_hmc_GparityWilsonGauge Test_hmc_IwasakiGauge Test_hmc_RectGauge Test_hmc_WilsonFermionGauge Test_hmc_WilsonGauge Test_hmc_WilsonRatio Test_lie_generators Test_main Test_multishift_sqrt Test_nersc_io Test_partfrac_force Test_quenched_update Test_rect_force Test_remez Test_rhmc_EOWilson1p1 Test_rhmc_EOWilsonRatio Test_rhmc_Wilson1p1 Test_rhmc_WilsonRatio Test_rng Test_rng_fixed Test_serialisation Test_simd Test_stencil Test_synthetic_lanczos Test_wilson_cg_prec Test_wilson_cg_schur Test_wilson_cg_unprec Test_wilson_cr_unprec Test_wilson_even_odd Test_wilson_force Test_wilson_force_phiMdagMphi Test_wilson_force_phiMphi Test_wilson_tm_even_odd
|
bin_PROGRAMS += Test_GaugeAction Test_RectPlaq Test_cayley_cg Test_cayley_coarsen_support Test_cayley_even_odd Test_cayley_ldop_cr Test_cf_coarsen_support Test_cf_cr_unprec Test_cheby Test_contfrac_cg Test_contfrac_even_odd Test_contfrac_force Test_cshift Test_cshift_red_black Test_cshift_red_black_rotate Test_cshift_rotate Test_dwf_cg_prec Test_dwf_cg_schur Test_dwf_cg_unprec Test_dwf_cr_unprec Test_dwf_even_odd Test_dwf_force Test_dwf_fpgcr Test_dwf_gpforce Test_dwf_hdcr Test_dwf_lanczos Test_dwf_rb5d Test_gamma Test_gp_rect_force Test_gparity Test_gpdwf_force Test_gpwilson_even_odd Test_hmc_EODWFRatio Test_hmc_EODWFRatio_Gparity Test_hmc_EOWilsonFermionGauge Test_hmc_EOWilsonRatio Test_hmc_GparityIwasakiGauge Test_hmc_GparityWilsonGauge Test_hmc_IwasakiGauge Test_hmc_RectGauge Test_hmc_WilsonFermionGauge Test_hmc_WilsonGauge Test_hmc_WilsonRatio Test_lie_generators Test_main Test_multishift_sqrt Test_nersc_io Test_partfrac_force Test_quenched_update Test_rect_force Test_remez Test_rhmc_EOWilson1p1 Test_rhmc_EOWilsonRatio Test_rhmc_Wilson1p1 Test_rhmc_WilsonRatio Test_rng Test_rng_fixed Test_serialisation Test_simd Test_stencil Test_synthetic_lanczos Test_wilson_cg_prec Test_wilson_cg_schur Test_wilson_cg_unprec Test_wilson_cr_unprec Test_wilson_even_odd Test_wilson_force Test_wilson_force_phiMdagMphi Test_wilson_force_phiMphi Test_wilson_tm_even_odd
|
||||||
|
|
||||||
|
|
||||||
Test_GaugeAction_SOURCES=Test_GaugeAction.cc
|
Test_GaugeAction_SOURCES=Test_GaugeAction.cc
|
||||||
|
@ -140,4 +140,18 @@ int main(int argc,char **argv)
|
|||||||
std::cout << "Loaded (txt) -----------------" << std::endl;
|
std::cout << "Loaded (txt) -----------------" << std::endl;
|
||||||
std::cout << copy3 << std::endl << veccopy3 << std::endl;
|
std::cout << copy3 << std::endl << veccopy3 << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<int> iv = strToVec<int>("1 2 2 4");
|
||||||
|
std::vector<std::string> sv = strToVec<std::string>("bli bla blu");
|
||||||
|
|
||||||
|
for (auto &e: iv)
|
||||||
|
{
|
||||||
|
std::cout << e << " ";
|
||||||
|
}
|
||||||
|
std::cout << std::endl;
|
||||||
|
for (auto &e: sv)
|
||||||
|
{
|
||||||
|
std::cout << e << " ";
|
||||||
|
}
|
||||||
|
std::cout << std::endl;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user