2017-06-19 1 views
-1

Je m'entraînais avec un peu d'exercice comme P3.jl. Quand je cours le code suivant, il n'y a aucune erreur et la réponse est correcte."julia-lang: Ce cas n'est pas encore supporté"

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

Mais quand je lance avec N = 16386, il a une erreur:

This case is not supported yet

Comment puis-je résoudre?

Merci.

+0

ce n'est pas une erreur de julia. Jacobi_parallel est une fonction définie dans le fichier auquel vous avez lié, et l'erreur particulière est codée en dur. Rechercher la phrase "Cette affaire n'est pas encore prise en charge" dans la page et vous le verrez. (EDIT: bien que, hm, l'erreur n'a pas de sens en termes de calculs impliqués, peut-être qu'il y a une conversion inattendue en float à un certain point) –

+0

quelle version de julia utilisez-vous? Le code semble être pour une version plutôt ancienne (plus il y a des trucs bizarres là-dedans, mais, eh bien) ... après avoir corrigé quelques incompatibilités, le script s'est bien passé pour moi sur la dernière version stable (v0. 5.2). (j'ai changé 'ifloor (k/2)' à 'floor (Int64, k/2)' et 'error (' à 'error (') –

+0

@TasosPapastylianou j'utilise aussi la version 0.5.2, j'ai appliqué ces changements mais il a l'erreur précédente: Ce cas n'est pas encore supporté – Armaa

Répondre

3

Dans cette partie du code:

@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 

Lorsque vous appelez la première fois avec k = N-2 (ie N = 2048 ce qui déclenche l'erreur pour moi), k = 1023, et lorsque vous arrivez aux instructions 'spawn', dans le deuxième appel 'k' devient 511 et k2 devient 512, donc cette erreur est déclenchée.

Fait intéressant, l'erreur n'apparaît pas si vous exécutez sans ajouter d'autres processus de travail en premier. On peut supposer que la macro @spawn se comporte différemment/de façon inattendue quand il n'y a pas de travailleurs définis, je ne suis pas sûr. Quoi qu'il en soit, je ne pense pas que le bit lrefs fait ce que l'auteur pense faire (peut-être l'a-t-il fait dans une ancienne version de julia?)

+0

Je ne sais pas dans quelle version. J'ai besoin de corriger ce code, avez-vous des suggestions? – Armaa

+1

Je peux repérer le bug, mais je ne peux pas le réparer sans savoir ce que cette fonction est supposée faire, désolé. une «solution partielle» pour [une cession] (http://www.csd.uwo.ca/~moreno/cs2101a_moreno/htmls/CS2101-A2.pdf). (Cela explique la présence de bogues). devrait lire et comprendre [ce lien] (http://www.netlib.org/utk/papers/mpi-book/node44.html) et essayer d'écrire du code julia pour répliquer correctement cette fonctionnalité (et vous pouvez ou ne pouvez pas finir en utilisant le code partiel fourni). Je ne peux pas m'empêcher de faire mes devoirs, désolé. –

+0

merci pour vos explications. – Armaa