首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多线程应用程序与XPRESS解算器并行解决几个问题

多线程应用程序与XPRESS解算器并行解决几个问题
EN

Stack Overflow用户
提问于 2021-12-06 11:48:52
回答 1查看 102关注 0票数 1

我正在尝试转换一个使用Fico解决程序的线程应用程序,让它与OpenMP同时解决几个问题。我使用的许可方法仅限于一个进程,所以多线程程序应该在理论上起作用。

对于每个线程,我需要程序来:

  1. 执行模型
  2. 提取问题
  3. 解决问题

但是,我仍然会得到如下的分段错误和错误:

代码语言:javascript
运行
复制
Mosel: E-84: File `mem:0x7f5c9a0ca640/2000/0x7f5c9a0ca5c0': model cannot be renamed.
Mosel: E-83: Bim file `mem:0x7f5c9a0ca640/2000/0x7f5c9a0ca5c0' cannot be loaded.

例如,我以此示例代码为例。

  1. 运行它没有任何修改,它工作。
  2. 添加一个for(int i = 0; i < 100; i++),它工作,单线程。
  3. 使用#pragma omp parallel for进行Paralelize,就会出现“模型不能重命名”的错误。
  4. #pragma omp critical中添加一个parallel for (用于测试目的),如下所示,它可以工作。
代码语言:javascript
运行
复制
    int main(){
        #pragma omp parallel for
        for (int i = 0; i < 100; i++){
        #pragma omp critical
           {
         ... variables and code ...
           } // end critical
        } // end for
    }

我无法得到任何样本后,使他们多线程,所以这似乎是一个解决程序,许可证或我使用它的方式的限制。我用的是狗牌。

我知道Xpress对多线程MIP搜索单个问题有一定的支持,但我对并发单线程搜索感兴趣。

EN

回答 1

Stack Overflow用户

发布于 2021-12-07 11:03:29

我怀疑这是与讨论的这里相同的问题。在那次讨论中,结果是在一个循环中使用XPRMloadmod()来加载每个迭代模型。使用错误的参数调用该函数,会导致同名的不同模型,从而导致重命名模型的错误。

为了实现这一点,必须使用内部名称为XPRMloadmod()"*"调用这里,请参阅参考文档这里

代码应该如下所示(为简洁而省略的错误检查):

代码语言:javascript
运行
复制
XPRMinit();
#pragma omp parallel for
for (int k = 0; k < 20; k++){
  XPRMmodel mod;
  int result;
  mod=XPRMloadmod("burglar4.bim", "*");
  XPRMrunmod(mod, &result, NULL);
}

当然,将错误检查添加到代码中,这样您就不会最终使用没有正确加载的模型,等等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70245002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档