2014-07-04 10 views
7

Próbuję użyć Parallel Computing Toolbox w MATLAB, aby przyspieszyć intensywne obliczenia, które wykonuję. Zanim będę mógł użyć konstrukcji takich jak parfor, muszę utworzyć pulę pracowników za pośrednictwem matlabpool. Aby rozpocząć, po prostu chcę użyć domyślnego profilu/local przez samo wywołanie matlabpool bez żadnych dodatkowych parametrów. Jednak, kiedy to zrobić, pojawia się następujący komunikat o błędzie:Błąd przy użyciu matlabpool - Niezdefiniowana funkcja "distcomp.fileserializer"

>> matlabpool 
Starting matlabpool using the 'local' profile ... 
Error using matlabpool (line 134) 
Undefined function 'distcomp.fileserializer' for input arguments of type 
'distcomp.filestorage'. 

Używam MATLAB R2013a na Mac OS X 10.9.3 (Mavericks). Czy ktoś napotkał ten błąd? Jak to naprawić?

+0

Nie widziałem tego sam ... jaki jest wynik dla 'version -java'? jeśli jest to 1.6.0_39 (lub nowszy), generowany jest ten sam błąd [w tym wątku] (http://www.mathworks.co.uk/matlabcentral/answers/62496-java-mac-osx-10-6-update -12-problem-with-matlabpool) z łatką [tutaj] (http://www.mathworks.com/support/bugreports/919688). ** ostrzeżenie są doniesienia o złamaniu tej łatki 2013a **, ale inne rozwiązanie sugerowane jest w wątku ... – RTL

+0

@RTL - Moja wersja Java to 1.7.0_55. Widziałem tę nitkę, ale pomyślałem, że to dla innego błędu. W tej chwili witryna jest wyłączona, więc poczekam na jej powrót. Jeśli to rozwiąże mój problem, proszę uczyń to w odpowiedzi, a ja to zaakceptuję. – rayryeng

+0

OK, mam to działa. Dziękuję Ci bardzo. Napiszę instrukcje na temat tego, co zrobiłem na końcu. Łatka nie złamała mojej MATLAB i podejrzewam, że powodem, dla którego złamała się dla użytkownika, było to, że nie użył odpowiedniego pliku '.zip' łaty, który odnosi się do jego/jej wersji MATLAB. Napiszę odpowiedź. Dzięki! – rayryeng

Odpowiedz

4

Dzięki @RTL w powyższych komentarzach odkrył, że jest to błąd wprowadzony po aktualizacji wersji Java do wersji 1.6.0_39 lub nowszej. Wątek dla tego can be found here. Uruchamianie dowolnego kodu zestawu narzędzi Parallel Computing przy użyciu dowolnej wersji Javy, która jest co najmniej ta lub późniejsza, może spowodować wygenerowanie NullPointerException. Błąd distcomp.fileserializer jest tutaj jednym z błędów.

Jako taki, poprawiono błąd w wątku, który wymieniłem powyżej, gdzie kilka plików w MATLAB musi zostać zaktualizowanych. Oto kroki, które ja następnie rozwiązać ten błąd:

  1. przejdź do następującej strony internetowej, która opisuje ten bug fix: http://www.mathworks.com/support/bugreports/919688

  2. Istnieją .zip formaty dostępne, które zawierają niezbędne pliki musisz nadpisać w MATLAB. Każdy rodzaj pliku .zip odnosi się do wersji MATLAB, której używasz. Pobierz plik poprawny.zip, który odpowiada Twojej wersji MATLAB. W powyższym wątku jest plakat, z którym się konsultowałem, który twierdził, że pliki te zepsuły jego MATLAB, więc musieli ponownie zainstalować. To mi się nie przydarzyło.

    Jak Używam MATLAB R2013a, to jest link do pliku .zip że Pobrano: http://www.mathworks.com/support/bugreports/license/accept_license/5383?fname=attachment_919688_12b_13a_2013-03-08.zip&geck_id=919688

  3. Otwórz MATLAB, w wierszu polecenia wpisz następujące polecenie w: cd (matlabroot) i wcisnąć ENTER lub POWRÓT.

  4. W interfejsie GUI, w którym znajduje się okno podrzędne Bieżący folder, kliknij prawym przyciskiem myszy w dowolnym miejscu w tym obszarze, a następnie kliknij Otwórz bieżący folder w Finderze. To otworzy się, gdy MATLAB znajduje się w twoim systemie w Finderze. W moim przypadku mój MATLAB znajduje się tutaj: /Applications/MATLAB_R2013a.app

  5. Teraz zamknij MATLAB.

  6. Rozpakuj zawartość pobranego pliku .zip. Zobaczysz, że w rozpakowanym archiwum znajdują się trzy foldery: bugreport, java i toolbox. Musisz tylko martwić się o java i toolbox.

  7. Co trzeba zrobić, to po prostu zastąpić zawartość java i toolbox foldery z rozpakowanym archiwum z tych samych znalezionych MATLAB od kroku # 4 java i toolbox folderach.Zanim to zrobisz, przejdź do kroku 8.

  8. Zaleca się zapisanie kopii tego, co zamierzasz zastąpić przed wykonaniem tej czynności. Po prostu zmieniłem nazwę plików i folderów, które miałem zamiar zastąpić przyrostkiem old, aby w razie potrzeby móc z nich wrócić. Dla Państwa uwagę, to są pliki i foldery, które muszą zostać zastąpione przy użyciu pliku .zip:

    • java/jarext/distcomp/jiini2/
    • toolbox/distcomp/private/initcommon.m
  9. Teraz, że masz kopię zapasową tych plików, wziąć zawartość pliku .zip i zastąpić je w programie MATLAB w folderze znalezionym w kroku 4.

  10. Ponownie uruchom MATLAB. To powinno naprawić ten błąd i zadziałało to dla mnie.

+0

Używam MATLAB 8.3.0.532 (R2014a). Nie ma dostępnego pliku zip dla mojej wersji i otrzymuję tę samą 'Niezdefiniowaną funkcję 'distcomp.fileserializer' error – Phibins

+1

@Phibins Nie jestem pewien. Przepraszam. Skontaktuj się z MathWorks. – rayryeng

Powiązane problemy