单线程DLL函数的多个调用如何扩展?

时间:2014-09-19 14:52:58

标签: multithreading matlab dll mathematical-optimization linear-programming

目前我有一个DLL在MATLAB中访问MILP计算,据我所知,大多数MILP解算器都是单线程的,我想知道如何/如果它与MILP求解器上的多个同时调用一起发挥作用。计算是否在彼此之后排队,并且所有进程都是在单个线程中进行排队还是有某种方式来分散负载?

我试图了解这种组合如何有效地从单个呼叫扩展到100个几乎同时呼叫。它是否受到硬件或软件的限制?

1 个答案:

答案 0 :(得分:0)

据我所知,MATLAB Engine不是线程安全的。如果您的应用程序是多线程的,则必须确保只有一个线程始终访问Engine API。这并不是说内置MATLAB函数本身都是单线程的(实际上线性代数,FFT等中的许多操作都是内部多线程的),我只是谈论与MATLAB通信的Engine接口,这是不是线程安全的......

当然,这并不能阻止您使用多进程实现并行性。只需启动程序的多个实例,每个实例解决一个独立的线性规划问题。这是Parallel Computing Toolbox所依赖的事情(通过运行本地后台工作人员甚至是Distributed Computing Toolbox的远程工作人员)。