2013-04-07 45 views
-1

我有一個腳本,它解決了for循環中許多參數的微分方程組。 (迭代是完全獨立的,但是在每次迭代結束時,根據計算結果修改大矩陣(mat))。下面是代碼:(B是含有參數的矩陣)我可以在多個MATLAB會話上運行腳本而不是並行化腳本嗎?

mat=zeros(20000,1); 

    for n=1:20000   


     prop=B(n,:); % B is a (20000 * 2) matrix that contains U and V parameters 
     U=prop(1); 
     V=prop(2); 


     options=odeset('RelTol',1e-6,'AbsTol',1e-20); 
     [T,X]=ode45(@acceleration,tspan,x0,options); 

     rad=X(:,1); 
     if max(rad)<radius % radius is a constant 
     mat(n)=1; 

     end 

     function xprime=acceleration(T,X) 
     . 
     . 
     . 
     end 

首先我試圖使用PARFOR,但由於加速功能(ODE45輸入)定義爲內聯函數,(以達到更好的性能)我不能這樣做。

我可以打開4次MATLAB會議(我的CPU有4個內核),並在每個環節單獨運行的代碼,而不是修改來實現加速作爲一個單獨的函數的代碼,因此,使用PARFOR?它是否給4X在一個會話上運行的性能? (或者它是否具有與並行代碼相同的性能? - 在並行代碼中,我無法定義內聯函數 - ) (在Windows上)

回答

1

如果您已準備好將分離出的問題分離出來在4次會議中,然後重新組合結果,確保你可以做到這一點。根據我的經驗(在Windows上),它實際上運行速度更快,可以在四個單獨的會話中運行代碼,而不是使用4個工人的parfor循環。速度不如單個會話的4倍,因爲操作系統還有其他工作要做...所以例如,如果您沒有運行其他處理器繁重的應用程序,則操作系統本身可能佔用一個內核的25% ,給你一個單一會話的3.75倍性能。但是,這假定你有足夠的內存,這不是限制因素。

如果你想這樣做定期,你可能需要創建一些基於文件的信令/數據傳遞系統。

這顯然不像parfor那麼優雅,但是適用於您的情況,或者您無法承擔並行工具箱的許可費用。

+0

雖然你可能在技術上能夠做到@pancake暗示什麼,MATLAB的單個許可證授權您啓動最大MATLAB的兩個同時實例。如果您擁有併發許可證,則可以檢出儘可能多的許可證。 – 2013-04-08 10:47:44