2013-05-07 41 views
0

我寫了一個MATLAB程序,它可以對視頻進行計算。我認爲這是一個適合多個CPU核心的完美人選,因爲有很多平均完成。我只是把第一部分的每一幀發送給每個實驗室而苦苦掙扎。說(爲了簡單起見),它是一個200幀的文件。我讀過一些指南,並使用SPMD得到了這個。使用MATLAB進行並行圖像處理

spmd 
limitA = 1; 
limitB = 200; 
a = floor(((limitB-limitA)/numlabs)*(labindex-1)+limitA);        
b = floor((((limitB-limitA)/numlabs)*(labindex-1)+limitA)+(((limitB-limitA)/numlabs))); 
fprintf (1,'Lab %d works on [%f,%f].\n',labindex,a,b); 
end 

它成功地輸出每個工人將在它們各自的工作部分(如實驗1適用於1:50,實驗2 50:100等)。

現在我陷入困境的是如何讓我的主體代碼在每個實驗室的框架部分上工作。現在有編輯我的主代碼的提示或簡單的方法,以便知道基於Labindex的工作框架嗎?添加spmd到循環會導致錯誤,因此我的問題。

感謝

回答

0

從你有什麼繼,你不只是需要這樣的:

spmd 
    % each lab has its own different values for 'a' and 'b' 
    for idx = a:b 
     frame = readFrame(idx); % or whatever 
     newFrame = doSomethingWith(frame); 
     writeFrame(idx, newFrame); 
    end 
end 

當然,如果是那種你正在做的事情,你可能需要序列化幀寫入(即確保一次只寫入一個進程)。

+0

嘿,這有助於很多。我無法控制每個實驗室在其框架部分工作。但是現在我看到,如你所說,每個實驗室都會看到自己的「a和b」。應該能夠從這裏得到一些東西。謝謝。 – 2013-05-08 07:41:05