2016-04-19 20 views
1

während Matlab parfor stieß ich auf das folgende VerhaltenWarum verstößt Matlabs klare Transparenz?

parpool(2) 
parfor j=1:100 
    v = j+1; 
    clear v 
end 
> Error in ==> parallel_function>make_general_channel/channel_general at 886 
> Transparency violation error. 

ich looked into it, und zwar eine nicht verwenden clear innerhalb parfor erlaubt.

Meine Frage ist warum. v wird in jedem einzelnen Mitarbeiter erstellt und stört daher nicht die anderen Mitarbeiter.

Antwort

1

Matlab verwendet den statischen Codeanalysator, um zu verstehen, wie der Körper des Parfor-Loops mit dem Hauptarbeitsbereich interagiert, d. H. Welche Variablen an die Arbeiter und zurück übertragen werden müssen. Eine Anzahl von Funktionen, wie eval, evalc, evalin, assignin (mit dem Arbeitsbereich Argumente als 'caller' angegeben), load (es sei denn, der Ausgang eine Variablen zugewiesen wird), save und clear können Arbeitsbereich in einer Weise ändern, die durch die nicht vorhergesagt werden, statischer Analysator. Es gibt keine Möglichkeit, die Integrität des Arbeitsbereichs zu gewährleisten, wenn mehrere Worker auf ihm arbeiten und solche Funktionen verwendet werden.

Wichtig ist zu wissen, dass wenn Sie eine Befehlssyntax eine Funktion, wie clear v, the argument is passed as a string literal, was bedeutet, es gibt keine Möglichkeit für die statische Analysator zu verstehen, welche Variable Sie versuchen, zu löschen, damit keine Möglichkeit berufen Finde heraus, welchen Effekt der Befehl auf den Arbeitsbereich haben wird.

Als in documentation vorgeschlagen, die Abhilfe der größte Teil des Speichers durch eine Variable in parfor verwendet oben freizugeben ist: v = [];