1 #ifndef CPPAD_CG_FUNCTOR_MODEL_LIBRARY_INCLUDED
2 #define CPPAD_CG_FUNCTOR_MODEL_LIBRARY_INCLUDED
30 std::set<std::string> _modelNames;
31 unsigned long _version;
33 void (*_setThreadPoolDisabled)(int);
34 int (*_isThreadPoolDisabled)();
35 void (*_setThreads)(
unsigned int);
36 unsigned int (*_getThreads)();
37 void (*_setSchedulerStrategy)(int);
38 int (*_getSchedulerStrategy)();
39 void (*_setThreadPoolVerbose)(
int v);
40 int (*_isThreadPoolVerbose)();
41 void (*_setThreadPoolGuidedMaxWork)(
float v);
42 float (*_getThreadPoolGuidedMaxWork)();
43 void (*_setThreadPoolNumberOfTimeMeas)(
unsigned int n);
44 unsigned int (*_getThreadPoolNumberOfTimeMeas)();
59 virtual std::unique_ptr<FunctorGenericModel<Base>>
modelFunctor(
const std::string& modelName) = 0;
61 std::unique_ptr<GenericModel<Base>>
model(
const std::string& modelName)
override final {
62 return std::unique_ptr<GenericModel<Base>> (
modelFunctor(modelName).release());
88 bool required =
true) = 0;
91 if(_setThreadPoolDisabled !=
nullptr) {
92 (*_setThreadPoolDisabled)(disabled);
97 if(_isThreadPoolDisabled !=
nullptr) {
98 return bool((*_isThreadPoolDisabled)());
104 if (_getThreads !=
nullptr) {
105 return (*_getThreads)();
111 if (_setThreads !=
nullptr) {
117 if (_getSchedulerStrategy !=
nullptr) {
118 return ThreadPoolScheduleStrategy((*_getSchedulerStrategy)());
120 return ThreadPoolScheduleStrategy::DYNAMIC;
124 if (_setSchedulerStrategy !=
nullptr) {
125 (*_setSchedulerStrategy)(int(s));
129 void setThreadPoolVerbose(
bool v)
override {
130 if (_setThreadPoolVerbose !=
nullptr) {
131 (*_setThreadPoolVerbose)(int(v));
135 bool isThreadPoolVerbose()
const override {
136 if (_isThreadPoolVerbose !=
nullptr) {
137 return bool((*_isThreadPoolVerbose)());
142 void setThreadPoolGuidedMaxWork(
float v)
override {
143 if (_setThreadPoolGuidedMaxWork !=
nullptr) {
144 (*_setThreadPoolGuidedMaxWork)(v);
148 float getThreadPoolGuidedMaxWork()
const override {
149 if (_getThreadPoolGuidedMaxWork !=
nullptr) {
150 return (*_getThreadPoolGuidedMaxWork)();
156 if (_setThreadPoolNumberOfTimeMeas !=
nullptr) {
157 (*_setThreadPoolNumberOfTimeMeas)(n);
162 if (_getThreadPoolNumberOfTimeMeas !=
nullptr) {
163 return (*_getThreadPoolNumberOfTimeMeas)();
174 _setThreadPoolDisabled(nullptr),
175 _isThreadPoolDisabled(nullptr),
176 _setThreads(nullptr),
177 _getThreads(nullptr),
178 _setSchedulerStrategy(nullptr),
179 _getSchedulerStrategy(nullptr),
180 _setThreadPoolVerbose(nullptr),
181 _isThreadPoolVerbose(nullptr),
182 _setThreadPoolGuidedMaxWork(nullptr),
183 _getThreadPoolGuidedMaxWork(nullptr),
184 _setThreadPoolNumberOfTimeMeas(nullptr),
185 _getThreadPoolNumberOfTimeMeas(nullptr) {
192 unsigned long (*versionFunc)();
195 _version = (*versionFunc)();
197 throw CGException(
"The API version of the dynamic library (", _version,
198 ") is incompatible with the current version (",
204 void (*modelsFunc)(
char const *
const**,
int*);
207 char const*
const* model_names =
nullptr;
209 (*modelsFunc)(&model_names, &model_count);
211 for (
int i = 0; i < model_count; i++) {
212 _modelNames.insert(model_names[i]);
236 if(_setThreads !=
nullptr) {
237 (*_setThreads)(std::thread::hardware_concurrency());
ThreadPoolScheduleStrategy getThreadPoolSchedulerStrategy() const override
unsigned int getThreadPoolNumberOfTimeMeas() const override
void setThreadPoolDisabled(bool disabled) override
std::set< std::string > getModelNames() override
void setThreadNumber(unsigned int n) override
std::unique_ptr< GenericModel< Base > > model(const std::string &modelName) override final
virtual std::unique_ptr< FunctorGenericModel< Base > > modelFunctor(const std::string &modelName)=0
void setThreadPoolSchedulerStrategy(ThreadPoolScheduleStrategy s) override
bool isThreadPoolDisabled() const override
unsigned int getThreadNumber() const override
void setThreadPoolNumberOfTimeMeas(unsigned int n) override
virtual void * loadFunction(const std::string &functionName, bool required=true)=0
virtual unsigned long getAPIVersion()