用MATLAB调用并行化的可执行文件' dos'命令的行为与独立可执行文件不同

时间:2014-06-19 16:56:07

标签: c++ matlab parallel-processing

当我尝试使用MATLAB' dos()命令调用并行化的可执行文件时,它不会运行可执行文件并返回错误。

就其本身而言,这个简单的C ++程序完全按照您的预期运行:

/* Serial.exe */

#include <iostream>

int main(void) {

    std::cout << "Apple!\n";
    std::cout << "Banana!\n";

    return 0;

}

结果:

Apple!
Banana!

这一个是这样的:

/* Parallel */

#include <iostream>
#include <omp.h>

int main(void) {
    std::cout << "Apple!\n";

    #pragma omp parallel num_threads(8)
    {
        std::cout << "Banana!\n";
    }

    return 0;
}

结果:

Apple!
Banana!
Banana!
Banana!
Banana!
Banana!
Banana!
Banana!
Banana!

现在,我尝试使用以下MATLAB脚本调用这两个程序:

%%  MATLAB call script

exe_path_1 = 'C:\\Users\\Jim\\Documents\\MATLAB\\Serial.exe';
exe_path_2 = 'C:\\Users\\Jim\\Documents\\MATLAB\\Parallel.exe';

rtn_1 = dos(exe_path_1)
rtn_2 = dos(exe_path_2)

结果:

Apple!
Banana!
rtn_1 = 0
rtn_2 = -1.0737e+09

MATLAB&#39; dos()命令导致我的并行C ++代码失败的原因是什么?

1 个答案:

答案 0 :(得分:1)

我修复了一个类似的问题,通过java调用命令。这是一些使用java类的m代码:

rt = java.lang.Runtime.getRuntime();
pr = rt.exec(command);
input= java.io.BufferedReader(java.io.InputStreamReader(pr.getInputStream()));
while(1)
    f=(input.readLine());
    if isempty(f)
        break;
    end
    disp(char(f));
end