2014-06-19 17 views
5

Khi tôi cố gọi một tập tin thực thi song song với lệnh của MATLAB dos(), nó sẽ không chạy được và trả về lỗi.Gọi một tập tin thực thi song song với lệnh MATLAB 'dos' hoạt động khác với lệnh thực thi độc lập

On riêng của mình, C này đơn giản chương trình ++ chạy chính xác như bạn mong chờ:

/* Serial.exe */ 

#include <iostream> 

int main(void) { 

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

    return 0; 

} 

Kết quả:

Apple! 
Banana! 

Vì vậy, làm thế này:

/* 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; 
} 

Kết quả:

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

Bây giờ, tôi cố gắng gọi cho cả hai chương trình với kịch bản MATLAB sau:

%% 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) 

Kết quả:

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

nó là gì về lệnh MATLAB của dos() gây song song C của tôi ++ mã để Thất bại?

+3

Nó có thể hoạt động đúng nhưng chỉ trả lại kết quả cuối cùng. Điều gì xảy ra nếu bạn sử dụng 'rtn_2 = dos (exe_path_2, '- echo')' hoặc '[rtn_2, cmdout_2] = dos (exe_path_2)'? – excaza

+1

Sử dụng ''-echo'' không thay đổi kết quả. '[rtn_2, cmdout_2]' tạo ra cùng một giá trị 'rtn_2' và một chuỗi rỗng. – Jim

+2

Phiên bản Matlab nào? Một số phiên bản cũ hơn IIRC không bật đa luồng theo mặc định, bạn phải đặt nó trong Preferences. – paisanco

Trả lời

1

Tôi đã khắc phục sự cố tương tự khi gọi lệnh qua java. Dưới đây là một số mã m sử dụng các lớp java:

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 
Các vấn đề liên quan