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)();
48 _modelNames(std::move(other._modelNames)),
49 _version(other._version),
50 _onClose(other._onClose),
51 _setThreadPoolDisabled(other._setThreadPoolDisabled),
52 _isThreadPoolDisabled(other._isThreadPoolDisabled),
53 _setThreads(other._setThreads),
54 _getThreads(other._getThreads),
55 _setSchedulerStrategy(other._setSchedulerStrategy),
56 _getSchedulerStrategy(other._getSchedulerStrategy),
57 _setThreadPoolVerbose(other._setThreadPoolVerbose),
58 _isThreadPoolVerbose(other._isThreadPoolVerbose),
59 _setThreadPoolGuidedMaxWork(other._setThreadPoolGuidedMaxWork),
60 _getThreadPoolGuidedMaxWork(other._getThreadPoolGuidedMaxWork),
61 _setThreadPoolNumberOfTimeMeas(other._setThreadPoolNumberOfTimeMeas),
62 _getThreadPoolNumberOfTimeMeas(other._getThreadPoolNumberOfTimeMeas) {
63 other._onClose =
nullptr;
78 virtual std::unique_ptr<FunctorGenericModel<Base>>
modelFunctor(
const std::string& modelName) = 0;
80 std::unique_ptr<GenericModel<Base>>
model(
const std::string& modelName)
override final {
81 return std::unique_ptr<GenericModel<Base>> (
modelFunctor(modelName).release());
106 virtual void*
loadFunction(
const std::string& functionName,
107 bool required =
true) = 0;
110 if(_setThreadPoolDisabled !=
nullptr) {
111 (*_setThreadPoolDisabled)(disabled);
116 if(_isThreadPoolDisabled !=
nullptr) {
117 return bool((*_isThreadPoolDisabled)());
123 if (_getThreads !=
nullptr) {
124 return (*_getThreads)();
130 if (_setThreads !=
nullptr) {
136 if (_getSchedulerStrategy !=
nullptr) {
137 return ThreadPoolScheduleStrategy((*_getSchedulerStrategy)());
139 return ThreadPoolScheduleStrategy::DYNAMIC;
143 if (_setSchedulerStrategy !=
nullptr) {
144 (*_setSchedulerStrategy)(int(s));
148 void setThreadPoolVerbose(
bool v)
override {
149 if (_setThreadPoolVerbose !=
nullptr) {
150 (*_setThreadPoolVerbose)(int(v));
154 bool isThreadPoolVerbose()
const override {
155 if (_isThreadPoolVerbose !=
nullptr) {
156 return bool((*_isThreadPoolVerbose)());
161 void setThreadPoolGuidedMaxWork(
float v)
override {
162 if (_setThreadPoolGuidedMaxWork !=
nullptr) {
163 (*_setThreadPoolGuidedMaxWork)(v);
167 float getThreadPoolGuidedMaxWork()
const override {
168 if (_getThreadPoolGuidedMaxWork !=
nullptr) {
169 return (*_getThreadPoolGuidedMaxWork)();
175 if (_setThreadPoolNumberOfTimeMeas !=
nullptr) {
176 (*_setThreadPoolNumberOfTimeMeas)(n);
181 if (_getThreadPoolNumberOfTimeMeas !=
nullptr) {
182 return (*_getThreadPoolNumberOfTimeMeas)();
193 _setThreadPoolDisabled(
nullptr),
194 _isThreadPoolDisabled(
nullptr),
195 _setThreads(
nullptr),
196 _getThreads(
nullptr),
197 _setSchedulerStrategy(
nullptr),
198 _getSchedulerStrategy(
nullptr),
199 _setThreadPoolVerbose(
nullptr),
200 _isThreadPoolVerbose(
nullptr),
201 _setThreadPoolGuidedMaxWork(
nullptr),
202 _getThreadPoolGuidedMaxWork(
nullptr),
203 _setThreadPoolNumberOfTimeMeas(
nullptr),
204 _getThreadPoolNumberOfTimeMeas(
nullptr) {
211 unsigned long (*versionFunc)();
214 _version = (*versionFunc)();
216 throw CGException(
"The API version of the dynamic library (", _version,
217 ") is incompatible with the current version (",
223 void (*modelsFunc)(
char const *
const**,
int*);
226 char const*
const* model_names =
nullptr;
228 (*modelsFunc)(&model_names, &model_count);
230 for (
int i = 0; i < model_count; i++) {
231 _modelNames.insert(model_names[i]);
255 if(_setThreads !=
nullptr) {
256 (*_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