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());
87 virtual void*
loadFunction(
const std::string& functionName,
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());
void setThreadPoolNumberOfTimeMeas(unsigned int n) override
bool isThreadPoolDisabled() const override
virtual std::unique_ptr< FunctorGenericModel< Base > > modelFunctor(const std::string &modelName)=0
std::set< std::string > getModelNames() override
void setThreadPoolSchedulerStrategy(ThreadPoolScheduleStrategy s) override
unsigned int getThreadNumber() const override
void setThreadPoolDisabled(bool disabled) override
unsigned int getThreadPoolNumberOfTimeMeas() const override
void setThreadNumber(unsigned int n) override
virtual unsigned long getAPIVersion()
ThreadPoolScheduleStrategy getThreadPoolSchedulerStrategy() const override
std::unique_ptr< GenericModel< Base > > model(const std::string &modelName) override final
virtual void * loadFunction(const std::string &functionName, bool required=true)=0