同时调用两个Matlab函数.net
我正在编写一个C#应用程序,我想同时调用不同的matlab函数(来自不同的线程)。每个Matlab函数都位于其自己编译的.net库中。看来,我只能一次调用一个Matlab函数。同时调用两个Matlab函数.net
即,如果从thread1调用matlab_func1(),则从thread2调用matlab_func2(),matlab_func2()必须等待matlab_func1()完成执行。
有没有办法同时调用不同的matlab函数?谢谢。
MWArray[] DoKalmanFilter(double vel_x, double vel_y, double vel_z, double cal_x, double cal_y, double cal_z, bool doCal)
{
...set up parameters
ret = KalmanFilter.kalman_actual(6, velx, vely, velz, cal_x, cal_y, cal_z,
return ret;
}
private void DoImageProcessing()
{
..set up parameters
MWArray[] ret = _imgProcessor.DoImageProcessing(2, rgbMarkerColor, hsvThreshold, angleDiffThreshold);
}
我建议,当你打电话给你的函数,MATLAB(或MATLAB的是被嵌入到一个DLL实时车间)被启动,并运行该功能。 C#和C之间的MATLAB接口可能有一些全局外部变量,因此在相同的过程中,MATLAB可能不会产生两次。另外,MATLAB本身在很多方面都是单线程的。他们正在致力于更多地使用多核。
我已经使用过Java/Matlab接口,并且在this site上阅读了以下内容: Matlab是单线程的。这意味着如果您尝试从Java函数直接调用的Java函数中进行评估或调整,它将等待第一个matlab函数终止。
我可能会建议作为一个测试,将“DoKalmanFilter”和“DoImageProcessing”放入单独的程序集或应用程序中,然后生成一个应用程序,生成您的两个新的独立应用程序。这样你就可以得到两个进程,MATLAB将在每个进程中运行一次,让你能够同时运行你的函数。
如果有效,您可以开始思考如何解决这个问题。你不希望产生应用程序并一直关闭它们。您可能需要在流程之间使用一些进程间通信来传递数据,它可能会变得很难看:-)
云计算一路走来。你只需将这个傻瓜指向云端,让像亚马逊这样的供应商处理它。
当然,云端数据封送会产生开销,但这绝不会与matlab中的实际工作对每个事务所花费的时间产生竞争。
这是一个非常低成本的解决方案,它比您可以在内部做的更经济地扩展(我假设您并非停在世界级的服务器场中)。
下面是我去的东西滚动: http://www.mathworks.com/programs/techkits/ec2_paper.html
云就是这个道理。
我低估了你,因为虽然可以说是有用的,但你的答案在这里并不合适。 – 2010-04-22 06:41:34
A single application only has access to a single MCR computational engine.
因此,Fuzz说,你需要创建第二个应用程序,或者至少第二过程,而不是第二个线程。但是,您可以将代码保留在一个程序集中 - 从第二个进程调用同一个程序集为其提供自己的资源。
另一种方法是使用MATLAB的并行处理工具箱将每个函数调用拆分到多个内核中,使每个函数调用更快,并按顺序调用它们。但是,这取决于您的MATLAB函数是否适合并行化。
你可以请发表你正在使用的线程你的matlab调用? – 2010-04-11 20:55:53
我的意思是......这些方法被从不同的线程调用。你有什么特别感兴趣的看到? – Mav3rick 2010-04-11 23:35:23