在不阻塞主线程的情况下调用MEX功能

时间:2014-12-15 19:24:11

标签: multithreading matlab mex

在我的Matlab代码中,我调用一个MEX函数,需要几秒钟才能执行(使用Caffe进行特征提取,http://caffe.berkeleyvision.org/)。我想知道是否有一种方法可以在不阻止Matlab的主线程的情况下调用此函数,因此我可以在等待它完成时同时运行其他Matlab命令。

例如,是否有可能在另一个线程中启动并行计算工具箱的MEX调用?

1 个答案:

答案 0 :(得分:1)

不编辑MEX文件,一种方法是使用batch

c = parcluster();
job = batch(c, @myMEXfun, numOutputs, {myinput1,myinput2});
% do something else in MATLAB
job.wait();
out = job.fetchOutputs();

parfeval也有可能:

p = gcp();
f = parfeval(@myMEXfun, numOutputs, myinput1, myinput2);
% do something else in MATLAB
out = fetchOutputs(f); % Blocks until complete

它们都允许异步执行。

这也可以在没有Parallel Computing Toolbox 的情况下完成,但是对MEX文件源进行了重大更改以创建线程,并使用其他语法来检查完成和检索输出。