DMUG-Archiv 2011

Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

Re: Nummerierung von Variablen in parallelen Routinen schlägt fehl (MMA8)

Hallo Hakan & Rolf,

In[43]:= Remove[pr]
Array[pr, {101}, {2200}] // Short

Out[44]//Short= {pr[2200], pr[2201], pr[2202], pr[2203], <<93>>,
        pr[2297], pr[2298], pr[2299], pr[2300]}

works, jedoch

In[47]:= Remove[pr]
SetSharedVariable[pr]
Array[pr, {101}, {2200}] // Short

Out[49]//Short= {Null[2200], Null[2201], Null[2202], <<95>>,
        Null[2298], Null[2299], Null[2300]}

doesn't work: nach der Verwendung von SetSharedVariable[pr] ist
pr nur deklariert, nicht initialisiert. Die Hilfe zu
SetSharedVariable[] sagt: "Shared variables without
a value evaluate to Null."

Deshalb gibt man mit

Remove[pr]
SetSharedVariable[Array[pr, {101}, {2200}] = Table[{}, {101}]];
Do[pr[i] = {}, {i, 2200, 2300}];
ParallelDo[If[PrimeQ[2^i - 1], AppendTo[pr[i], i]], {i, 2200, 2300}]
Do[Print[pr[i]], {i, 2200, 2300}];

auch die leeren Listen aus, worin die urspruengliche Intention des problem owners
gelegen haben mag.

Gruss
Udo.

SetSharedFunction[pr];
        Do[pr[i] = {},{i,2000, 4000}];
ParallelDo[If[PrimeQ[2^i-1], AppendTo[pr[i],i]],{i,2000,4000}];
Do[If[pr[i]=!={},Print[pr[i]]],{i,2000,4000}];

geht.

Gruss aus Berlin,

Rolf Mertig

P.s.: http://www.wolfram.com/services/education/courses/m225.html

--
GluonVision GmbH
http://www.gluonvision.com


Am 24.03.2011 16:02, schrieb Hakan Önel:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512



Liebe Mathematica-DEMUG-Community,

  ich arbeite zwar länger mit Mathematica, bin aber mit
  den Parallelisierungsroutienen von Mathematica 8 noch
  nicht sehr vertraut und wende mich daher mit einem
  Verständnisproblem an die DEMUG:

  In der Mathematica 8-Hilfe ist unter "ParallelDo" das
  folgende Beispiel zu finden:

   SetSharedVariable[pr]
   pr = {};
    ParallelDo[If[PrimeQ[2^i - 1], AppendTo[pr, i]], {i, 2000, 4000}]
   pr

  was das Resultat {2203, 2281, 3217} liefert.
  So weit, so gut.


  Nun möchte ich aber, für eine andere Anwendung, dieses Beispiel
  abändern:

   SetSharedVariable[pr]
   Do[pr[i] = {},{i,2000,4000}];
    ParallelDo[If[PrimeQ[2^i - 1], AppendTo[pr[i], i]], {i, 2000, 4000}]
   Do[Print[pr[i]],{i,2000,4000}];

  Dies jedoch schlägt mit Fehlermeldungen der Form
   "Set::write: Tag Null in Null[2000] is Protected.>>"
  fehl.

  Zugegeben, dieses Beispiel ist ein wenig an den Haaren herbei-
  gezogen, aber das Problem ist hoffentlich klar: Innerhalb einer
  parallelen Umgebung gelingt es mir nicht Variabelen druchzu-
  nummerieren. Dies muss aber doch irgendwie funktionieren...

  Über hilfreiche Kommentare hierzu würde ich mich freuen.

Vielen Dank und viele Grüße

  Hakan
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.15 (GNU/Linux)

iQIcBAEBCgAGBQJNi10CAAoJEHrvU7SxOdYG6UkQAKDNWqREEzH9Nq0IJ7Qe6QIF
s5oeRaJhduXabu7iclLvDGyVEynNV4kowlMB7blc4ZcXSMvL0RQEVQiPcwCiFRFs
7/hOlkS9URXIaw4gER7Fx4/DmCSZdZk1xQpyp0yzhBpMX/K+DI18Bc4XoxCiuZWM
c0IrdH2EPp7Wt2OwG6oZc4wuFWCJJxu/Oc0m+6G1q3mKUh4yVGMoAF5wnae+kn8e
Nziv4bB1le89DzW/FaUhof7On4Brb7r+TDAWEu3fyeuXdVcvp12b4taT05AJiSad
D3V+rGcihGAs0R1+Vnv67HP2iUXmcE6vXu8Tl95HIch2J1R5RuXguLeF4RH4Yoxn
yng1bKcvrlTuOGsXvJ6B0IZG8ZzBdvJl1U48eDd/BcxFvPm4jC6Zsx+jZUvZ1mVo
lQaMo91m3Ip7/eLJlaYIomw5DU/sX2WJjhi+leQ4Sw2b8Mae1BZqERdiVoaG5I7z
sax0kEPGuyJJjY08/O9HAAggl5YzoGFS6oLEzZkiCwAD9qY2sIT1iAw+MiDqHqUI
jNW3F9zYWMLMPbynK3hTVQCv6M7FahITu21KJ1OO7xWwzcqWVvZj94oAbsJb+ytH
gA784IwZ/ALe4xd4COY90V8lhxUxv4jLiylcaK47xCUvFjryvxIayGogi07vD/S/
EguklsY6UBNt2/FjKI+c
=EcmT
-----END PGP SIGNATURE-----





Antworten:
Verweise:
Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

DMUG DMUG-Archiv, http://www.mathematica.ch/archiv.html