2017-06-19 4 views
-1

Ich übte mit etwas Übung wie P3.jl. Wenn ich folgenden Code ausführe, hat es keinen Fehler und die Antwort ist korrekt."julia-lang: Dieser Fall wird noch nicht unterstützt"

N = 10 
A = rand(N,N) 
SA = convert(SharedArray, A) 
T = 100 
Jacobi_parallel(SA,N,T) 

Aber wenn ich mit N = 16386 laufen, hat es einen Fehler:

This case is not supported yet

Wie kann ich es beheben?

Vielen Dank.

+0

Dies ist kein Fehler von Julia. Jacobi_parallel ist eine Funktion, die in der Datei definiert ist, mit der Sie verbunden sind, und der spezielle Fehler ist darin fest codiert. Suchen Sie nach dem Ausdruck "Dieser Fall wird noch nicht unterstützt" auf der Seite und Sie werden es sehen. (BEARBEITEN: hm, der Fehler macht auch keinen Sinn in Bezug auf die Berechnungen. Vielleicht gibt es eine unerwartete Konvertierung, um an einem bestimmten Punkt zu schweben) –

+0

Welche Version von Julia benutzt du? Der Code scheint für eine etwas ältere Version zu sein (plus ein paar "seltsame Sachen", aber, na ja) ... nachdem ich ein paar Inkompatibilitäten behoben hatte, lief das Skript für mich auf dem neuesten Stable (v0. 5.2). (ich habe 'ifloor (k/2)' in 'floor (Int64, k/2)' und 'error (' in 'error (') –

+0

@TasosPapastylianou geändert, ich benutze auch Version 0.5.2, ich habe diese Änderungen aber übernommen Es hat den vorherigen Fehler: Dieser Fall wird noch nicht unterstützt – Armaa

Antwort

3

In diesem Teil des Codes:

@everywhere function Jacobi_blockwise_parallel_one_time_step(A,x,y,k,threshold) 
    if k <= threshold 
    Jacobi_serial_one_block_one_time_step(A,x,y,k) 
    else 
    k1 = floor(Int64, k/2) 
    k2 = k - k1 
    if (k1 != k2) error("This case is not supported yet") end 
    lrefs = [@spawn Jacobi_blockwise_parallel_one_time_step(A,x,y,k1,threshold), 
      @spawn Jacobi_blockwise_parallel_one_time_step(A,x+k1,y,k1,threshold), 
      @spawn Jacobi_blockwise_parallel_one_time_step(A,x,y+k1,k1,threshold), 
      @spawn Jacobi_blockwise_parallel_one_time_step(A,x+k1,y+k1,k1,threshold)]; 
    pmap(fetch, lrefs) 
    end 
end 

Wenn Sie es das erste Mal mit k nennen = N-2 (dh für N = 2048 diese den Fehler für mich löst), k = 1023 und Wenn Sie zu den 'spawn'-Anweisungen kommen, wird im zweiten Aufruf' k '511 und k2 wird 512, so dass dieser Fehler ausgelöst wird.

Interessanterweise wird der Fehler nicht angezeigt, wenn Sie ausführen, ohne zuerst zusätzliche Arbeitsprozesse hinzuzufügen. Vermutlich verhält sich das @ spawn-Makro anders/unerwartet, wenn es keine definierten Worker gibt, bin ich mir nicht sicher. Wie auch immer, ich glaube nicht, dass das lrefs Bit tut, was der Autor denkt, dass es tut (vielleicht tat es in einer älteren Version von Julia?)

+0

Ich weiß nicht, es in welcher Version. Danke Ich muss diesen Code korrigieren. Haben Sie einen Vorschlag? – Armaa

+1

Ich kann den Fehler erkennen, aber ich kann es nicht "reparieren", ohne zu wissen, was diese Funktion tun soll, tut mir leid. Außerdem habe ich nur diesen Code nur entdeckt eine "Teillösung" für [eine Aufgabe] (http://www.csd.uwo.ca/~moreno/cs2101a_moreno/htmls/CS2101-A2.pdf). (Das erklärt das Vorhandensein von Fehlern.) Grundsätzlich bist du Es wird erwartet, dass Sie [diesen Link] lesen und verstehen (http://www.netlib.org/utk/papers/mpi-book/node44.html) und versuchen, julia-Code zu schreiben, um diese Funktionalität entsprechend zu replizieren (und Sie möglicherweise oder nicht am Ende mit dem bereitgestellten Teilcode). Ich kann jedoch nicht mit Hausaufgaben helfen, sorry. –

+0

danke für deine erklärungen. – Armaa

Verwandte Themen