mirror of
https://github.com/paboyle/Grid.git
synced 2025-04-09 21:50:45 +01:00
Hadrons: object creation that get properly captured by the memory profiler
This commit is contained in:
parent
e78794688a
commit
0fbf445edd
@ -100,11 +100,16 @@ public:
|
|||||||
// general memory management
|
// general memory management
|
||||||
void addObject(const std::string name,
|
void addObject(const std::string name,
|
||||||
const int moduleAddress = -1);
|
const int moduleAddress = -1);
|
||||||
template <typename T, typename P>
|
template <typename B, typename T, typename ... Ts>
|
||||||
|
void createDerivedObject(const std::string name,
|
||||||
|
const Environment::Storage storage,
|
||||||
|
const unsigned int Ls,
|
||||||
|
Ts && ... args);
|
||||||
|
template <typename T, typename ... Ts>
|
||||||
void createObject(const std::string name,
|
void createObject(const std::string name,
|
||||||
const Storage storage,
|
const Environment::Storage storage,
|
||||||
const unsigned int Ls,
|
const unsigned int Ls,
|
||||||
P &&pt);
|
Ts && ... args);
|
||||||
void setObjectModule(const unsigned int objAddress,
|
void setObjectModule(const unsigned int objAddress,
|
||||||
const int modAddress);
|
const int modAddress);
|
||||||
template <typename T>
|
template <typename T>
|
||||||
@ -195,11 +200,11 @@ void Holder<T>::reset(T *pt)
|
|||||||
* Environment template implementation *
|
* Environment template implementation *
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
// general memory management ///////////////////////////////////////////////////
|
// general memory management ///////////////////////////////////////////////////
|
||||||
template <typename T, typename P>
|
template <typename B, typename T, typename ... Ts>
|
||||||
void Environment::createObject(const std::string name,
|
void Environment::createDerivedObject(const std::string name,
|
||||||
const Environment::Storage storage,
|
const Environment::Storage storage,
|
||||||
const unsigned int Ls,
|
const unsigned int Ls,
|
||||||
P &&pt)
|
Ts && ... args)
|
||||||
{
|
{
|
||||||
if (!hasObject(name))
|
if (!hasObject(name))
|
||||||
{
|
{
|
||||||
@ -210,13 +215,13 @@ void Environment::createObject(const std::string name,
|
|||||||
|
|
||||||
if (!object_[address].data)
|
if (!object_[address].data)
|
||||||
{
|
{
|
||||||
MemoryStats memStats;
|
MemoryStats memStats;
|
||||||
|
|
||||||
MemoryProfiler::stats = &memStats;
|
MemoryProfiler::stats = &memStats;
|
||||||
object_[address].storage = storage;
|
object_[address].storage = storage;
|
||||||
object_[address].Ls = Ls;
|
object_[address].Ls = Ls;
|
||||||
object_[address].data.reset(new Holder<T>(pt));
|
object_[address].data.reset(new Holder<B>(new T(std::forward<Ts>(args)...)));
|
||||||
object_[address].size = memStats.totalAllocated;
|
object_[address].size = memStats.maxAllocated;
|
||||||
object_[address].type = &typeid(T);
|
object_[address].type = &typeid(T);
|
||||||
MemoryProfiler::stats = nullptr;
|
MemoryProfiler::stats = nullptr;
|
||||||
}
|
}
|
||||||
@ -226,6 +231,15 @@ void Environment::createObject(const std::string name,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename T, typename ... Ts>
|
||||||
|
void Environment::createObject(const std::string name,
|
||||||
|
const Environment::Storage storage,
|
||||||
|
const unsigned int Ls,
|
||||||
|
Ts && ... args)
|
||||||
|
{
|
||||||
|
createDerivedObject<T, T>(name, storage, Ls, std::forward<Ts>(args)...);
|
||||||
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
T * Environment::getObject(const unsigned int address) const
|
T * Environment::getObject(const unsigned int address) const
|
||||||
{
|
{
|
||||||
|
@ -98,39 +98,42 @@ static ns##mod##ModuleRegistrar ns##mod##ModuleRegistrarInstance;
|
|||||||
#define envHasType(type, name)\
|
#define envHasType(type, name)\
|
||||||
env().template isObjectOfType<type>(name)
|
env().template isObjectOfType<type>(name)
|
||||||
|
|
||||||
#define envCreate(type, name, Ls, pt)\
|
#define envCreate(type, name, Ls, ...)\
|
||||||
env().template createObject<type>(name, Environment::Storage::object, Ls, pt)
|
env().template createObject<type>(name, Environment::Storage::object, Ls, __VA_ARGS__)
|
||||||
|
|
||||||
|
#define envCreateDerived(base, type, name, Ls, ...)\
|
||||||
|
env().template createDerivedObject<base, type>(name, Environment::Storage::object, Ls, __VA_ARGS__)
|
||||||
|
|
||||||
#define envCreateLat4(type, name)\
|
#define envCreateLat4(type, name)\
|
||||||
envCreate(type, name, 1, new type(env().getGrid()))
|
envCreate(type, name, 1, env().getGrid())
|
||||||
|
|
||||||
#define envCreateLat5(type, name, Ls)\
|
#define envCreateLat5(type, name, Ls)\
|
||||||
envCreate(type, name, Ls, new type(env().getGrid(Ls)))
|
envCreate(type, name, Ls, env().getGrid(Ls))
|
||||||
|
|
||||||
#define envCreateLat(...)\
|
#define envCreateLat(...)\
|
||||||
MACRO_REDIRECT(__VA_ARGS__, envCreateLat5, envCreateLat4)(__VA_ARGS__)
|
MACRO_REDIRECT(__VA_ARGS__, envCreateLat5, envCreateLat4)(__VA_ARGS__)
|
||||||
|
|
||||||
#define envCache(type, name, Ls, pt)\
|
#define envCache(type, name, Ls, ...)\
|
||||||
env().template createObject<type>(name, Environment::Storage::cache, Ls, pt)
|
env().template createObject<type>(name, Environment::Storage::cache, Ls, __VA_ARGS__)
|
||||||
|
|
||||||
#define envCacheLat4(type, name)\
|
#define envCacheLat4(type, name)\
|
||||||
envCache(type, name, 1, new type(env().getGrid()))
|
envCache(type, name, 1, env().getGrid())
|
||||||
|
|
||||||
#define envCacheLat5(type, name, Ls)\
|
#define envCacheLat5(type, name, Ls)\
|
||||||
envCache(type, name, Ls, new type(env().getGrid(Ls)))
|
envCache(type, name, Ls, env().getGrid(Ls))
|
||||||
|
|
||||||
#define envCacheLat(...)\
|
#define envCacheLat(...)\
|
||||||
MACRO_REDIRECT(__VA_ARGS__, envCacheLat5, envCacheLat4)(__VA_ARGS__)
|
MACRO_REDIRECT(__VA_ARGS__, envCacheLat5, envCacheLat4)(__VA_ARGS__)
|
||||||
|
|
||||||
#define envTmp(type, name, Ls, pt)\
|
#define envTmp(type, name, Ls, ...)\
|
||||||
env().template createObject<type>(getName() + "_tmp_" + name, \
|
env().template createObject<type>(getName() + "_tmp_" + name, \
|
||||||
Environment::Storage::temporary, Ls, pt)
|
Environment::Storage::temporary, Ls, __VA_ARGS__)
|
||||||
|
|
||||||
#define envTmpLat4(type, name)\
|
#define envTmpLat4(type, name)\
|
||||||
envTmp(type, name, 1, new type(env().getGrid()))
|
envTmp(type, name, 1, env().getGrid())
|
||||||
|
|
||||||
#define envTmpLat5(type, name, Ls)\
|
#define envTmpLat5(type, name, Ls)\
|
||||||
envTmp(type, name, Ls, new type(env().getGrid(Ls)))
|
envTmp(type, name, Ls, env().getGrid(Ls))
|
||||||
|
|
||||||
#define envTmpLat(...)\
|
#define envTmpLat(...)\
|
||||||
MACRO_REDIRECT(__VA_ARGS__, envTmpLat5, envTmpLat4)(__VA_ARGS__)
|
MACRO_REDIRECT(__VA_ARGS__, envTmpLat5, envTmpLat4)(__VA_ARGS__)
|
||||||
|
@ -118,9 +118,8 @@ void TDWF<FImpl>::setup(void)
|
|||||||
auto &grb5 = *env().getRbGrid(par().Ls);
|
auto &grb5 = *env().getRbGrid(par().Ls);
|
||||||
std::vector<Complex> boundary = strToVec<Complex>(par().boundary);
|
std::vector<Complex> boundary = strToVec<Complex>(par().boundary);
|
||||||
typename DomainWallFermion<FImpl>::ImplParams implParams(boundary);
|
typename DomainWallFermion<FImpl>::ImplParams implParams(boundary);
|
||||||
envCreate(FMat, getName(), par().Ls,
|
envCreateDerived(FMat, DomainWallFermion<FImpl>, getName(), par().Ls, U, g5,
|
||||||
new DomainWallFermion<FImpl>(U, g5, grb5, g4, grb4, par().mass,
|
grb5, g4, grb4, par().mass, par().M5, implParams);
|
||||||
par().M5, implParams));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// execution ///////////////////////////////////////////////////////////////////
|
// execution ///////////////////////////////////////////////////////////////////
|
||||||
|
@ -111,9 +111,8 @@ void TWilson<FImpl>::setup(void)
|
|||||||
auto &gridRb = *env().getRbGrid();
|
auto &gridRb = *env().getRbGrid();
|
||||||
std::vector<Complex> boundary = strToVec<Complex>(par().boundary);
|
std::vector<Complex> boundary = strToVec<Complex>(par().boundary);
|
||||||
typename WilsonFermion<FImpl>::ImplParams implParams(boundary);
|
typename WilsonFermion<FImpl>::ImplParams implParams(boundary);
|
||||||
envCreate(FMat, getName(), 1, new WilsonFermion<FImpl>(U, grid, gridRb,
|
envCreateDerived(FMat, WilsonFermion<FImpl>, getName(), 1, U, grid, gridRb,
|
||||||
par().mass,
|
par().mass, implParams);
|
||||||
implParams));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// execution ///////////////////////////////////////////////////////////////////
|
// execution ///////////////////////////////////////////////////////////////////
|
||||||
|
@ -114,7 +114,7 @@ void TRBPrecCG<FImpl>::setup(void)
|
|||||||
|
|
||||||
schurSolver(mat, source, sol);
|
schurSolver(mat, source, sol);
|
||||||
};
|
};
|
||||||
envCreate(SolverFn, getName(), Ls, new SolverFn(solver));
|
envCreate(SolverFn, getName(), Ls, solver);
|
||||||
env().addOwnership(getName(), par().action);
|
env().addOwnership(getName(), par().action);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -251,8 +251,7 @@ Graph<unsigned int> VirtualMachine::makeModuleGraph(void) const
|
|||||||
// general execution ///////////////////////////////////////////////////////////
|
// general execution ///////////////////////////////////////////////////////////
|
||||||
#define BIG_SEP "==============="
|
#define BIG_SEP "==============="
|
||||||
#define SEP "---------------"
|
#define SEP "---------------"
|
||||||
#define MEM_MSG(size)\
|
#define MEM_MSG(size) sizeString(size)
|
||||||
sizeString((size)*env().getLocalVolume()) << " (" << sizeString(size) << "/site)"
|
|
||||||
|
|
||||||
VirtualMachine::Size
|
VirtualMachine::Size
|
||||||
VirtualMachine::executeProgram(const std::vector<unsigned int> &p)
|
VirtualMachine::executeProgram(const std::vector<unsigned int> &p)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user