mclInitializeApplication和并行执行- parfor mcc编译函数的线程池

3视图(30天)
你好,
我加入一些示例代码我们发展,我们希望你的意见。
我们有一些mcc编制matlab函数:
  1. matlab_singleFile:执行顺序
  2. 通过parfor matlab_singleFile_parloop:执行一个多线程计算
我们与mcc编译这些函数可以调用这些函数在c++中。由此产生的动态库调用: libmatlabtest.dll
我们有一些问题:
  1. 有任何风险当产卵1的连续函数。多个线程的上下文中thread_pool ?
  2. 有任何风险在调用多线程功能2。从C + + ?
通过“风险”,我们的意思是如果matlab mcc-compiled代码是完全线程安全的。
请注意,当然我们这里显示的功能测试函数。真正的功能我们将调用广泛利用Matlab工具箱并行计算工具箱等图像处理工具箱,工具箱信号等等。
也请参考之前 技术支持案例# 04万博1manbetx822880
谢谢,
达尼埃莱
清晰的代码报告:
%调用这个脚本:
% > > matlab_singleFile (“foobar”)
函数ret = matlab_oneFile(文件名)
保存(文件名+“.mat”);
disp ([的文件名传递给matlab_oneFile:“、文件名)
ret = true;
结束
%调用这个脚本:
% > > matlab_singleFile_parLoop (“foobar”)
函数ret = matlab_singleFile_parLoop(文件名)
保存(“matlab_singleFile_parLoop.mat”)
disp ([的文件名传递给matlab_oneFile:“、文件名)
disp (“并行计算”开始)
parfor我= 1:3,c(:,我)= eig (rand (1000));结束
disp (“并行计算”的终结)
ret = true;
结束
#包括< iostream >
#包括< stdexcept >
#包括向量> <
#包括<字符串>
#包括< mclmcrrt.h >
#包括< libmatlabtest.h >
/ /使用thread_pool来自:https://github.com/bshoshany/thread-pool
#包括“thread_pool.hpp”
无效compute_parFor (const std:: string数据){
mwArraydataArray (data.c_str ());
mwArrayretType;
matlab_singleFile_parloop (1 retType dataArray);
std:: cout < <“有ret类型:”< < retType。Get (1,1) < < std:: endl;
}
无效计算(const std:: string数据){
mwArrayFileNameArray (data.c_str ());
mwArrayretType;
matlab_singleFile (1 retType FileNameArray);
std:: cout < <“有ret类型:”< < retType。Get (1,1) < < std:: endl;
}
int主要(int命令行参数个数,char * * argv) {
std::向量< const char * >参数{“-nojvm”};
boolinitApp = mclInitializeApplication (args.data (), args.size ());
如果(initApp = = false)
{
扔std:: runtime_error (无法初始化MATLAB运行时:“+
std:: string (mclGetLastErrorMessage ()));
}
std:: cout < <“mclInitializeApplication完成”< < std:: endl;
boolinitLib = libmatlabtestInitialize ();
如果(initLib = = false)
std:: runtime_error(“不能初始化库:“+
std:: string (mclGetLastErrorMessage ()));
std:: cout < <“libMatlabTestInitialize完成”< < std:: endl;
/ / 1_按顺序运行一个平行的Matlab脚本(使用parfor)
compute_parFor (“data1”);
/ / 2_运行通过线程池:multiTreading顺序Matlab脚本
std::向量< std:: string > data2matlab {“data2”,“data3”,“data4”};
{
thread_pool池;
(size_t我= 0;我< data2matlab.size ();我+ +)
{
池。push_task([&,我]{计算(data2matlab[我]);});
}
}
libmatlabtestTerminate ();
mclTerminateApplication ();
返回0;
}

答案(0)

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!