2013-01-21 54 views
1

我有這段代碼,我想要並行運行。傳遞給包含parfor循環的函數的參數之一是一個函數句柄,然後在parfor循環內部執行該句柄。像這樣並行工具箱抱怨MATLAB中的函數句柄沒有分片

[X] = randstep(X,params,roomfun) 
    ... 
    parfor i=1:N 
    while ~ok 
     X(:,i) = A*X(:,i); 
     if roomfun(X(:,i)) 
     ok = 1; 
     end 
    end 
    end 

但是,MATLAB抱怨roomfun,說它是索引但沒有切片。這當然不是這種情況,因爲它是沒有其他循環迭代就可以正常執行的函數。

有沒有什麼辦法可以告訴matlab這是一個函數,或者也許另一種方式我可以組織循環,以獲得並行運行?

回答

1

首先,這只是一個警告,不是一個錯誤。所以parfor循環應該運行得很好。其次,對於被索引但沒有切片的東西的警告來自於mlint,雖然它相當好,但它不能理解所有的東西,所以如果它解釋了錯誤的東西,不要冒汗。

第三,在R2012b中,我甚至沒有再聽到警告(mlint變得更聰明),這進一步表明沒有什麼可擔心的。

最後,如果確實存在切片問題,它仍然不會阻止循環並行運行 - 所有警告提示數組完全發送給工作人員,這可能會減慢速度如果數組較大,則循環爲parfor

+0

感謝您的澄清!然後,我可以良心良知地忽略警告。 – while