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)();
60 virtual std::unique_ptr<FunctorGenericModel<Base>>
modelFunctor(
const std::string& modelName) = 0;
62 std::unique_ptr<GenericModel<Base>>
model(
const std::string& modelName)
override final {
63 return std::unique_ptr<GenericModel<Base>> (
modelFunctor(modelName).release());
88 virtual void*
loadFunction(
const std::string& functionName,
89 bool required =
true) = 0;
92 if(_setThreadPoolDisabled !=
nullptr) {
93 (*_setThreadPoolDisabled)(disabled);
98 if(_isThreadPoolDisabled !=
nullptr) {
99 return bool((*_isThreadPoolDisabled)());
105 if (_getThreads !=
nullptr) {
106 return (*_getThreads)();
112 if (_setThreads !=
nullptr) {
118 if (_getSchedulerStrategy !=
nullptr) {
119 return ThreadPoolScheduleStrategy((*_getSchedulerStrategy)());
121 return ThreadPoolScheduleStrategy::DYNAMIC;
125 if (_setSchedulerStrategy !=
nullptr) {
126 (*_setSchedulerStrategy)(int(s));
130 void setThreadPoolVerbose(
bool v)
override {
131 if (_setThreadPoolVerbose !=
nullptr) {
132 (*_setThreadPoolVerbose)(int(v));
136 bool isThreadPoolVerbose()
const override {
137 if (_isThreadPoolVerbose !=
nullptr) {
138 return bool((*_isThreadPoolVerbose)());
143 void setThreadPoolGuidedMaxWork(
float v)
override {
144 if (_setThreadPoolGuidedMaxWork !=
nullptr) {
145 (*_setThreadPoolGuidedMaxWork)(v);
149 float getThreadPoolGuidedMaxWork()
const override {
150 if (_getThreadPoolGuidedMaxWork !=
nullptr) {
151 return (*_getThreadPoolGuidedMaxWork)();
157 if (_setThreadPoolNumberOfTimeMeas !=
nullptr) {
158 (*_setThreadPoolNumberOfTimeMeas)(n);
163 if (_getThreadPoolNumberOfTimeMeas !=
nullptr) {
164 return (*_getThreadPoolNumberOfTimeMeas)();
175 _setThreadPoolDisabled(
nullptr),
176 _isThreadPoolDisabled(
nullptr),
177 _setThreads(
nullptr),
178 _getThreads(
nullptr),
179 _setSchedulerStrategy(
nullptr),
180 _getSchedulerStrategy(
nullptr),
181 _setThreadPoolVerbose(
nullptr),
182 _isThreadPoolVerbose(
nullptr),
183 _setThreadPoolGuidedMaxWork(
nullptr),
184 _getThreadPoolGuidedMaxWork(
nullptr),
185 _setThreadPoolNumberOfTimeMeas(
nullptr),
186 _getThreadPoolNumberOfTimeMeas(
nullptr) {
193 unsigned long (*versionFunc)();
196 _version = (*versionFunc)();
198 throw CGException(
"The API version of the dynamic library (", _version,
199 ") is incompatible with the current version (",
205 void (*modelsFunc)(
char const *
const**,
int*);
208 char const*
const* model_names =
nullptr;
210 (*modelsFunc)(&model_names, &model_count);
212 for (
int i = 0; i < model_count; i++) {
213 _modelNames.insert(model_names[i]);
237 if(_setThreads !=
nullptr) {
238 (*_setThreads)(std::thread::hardware_concurrency());
virtual bool isThreadPoolDisabled() const override
void setThreadPoolNumberOfTimeMeas(unsigned int n) 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