[GAP Forum] Problem with ParGap and ParList
Mark Flanagan
mark.evan.flanagan at gmail.com
Fri Oct 11 15:43:27 BST 2013
That fixed it! I'm still a bit confused because there was no trouble
running this code using gap (not pargap) and nowhere in my code do I
explicitly reference the variable 'f1'.
Thanks!
Best,
Mark
Dear Mark,
On 8 Oct 2013, at 20:57, Mark Flanagan <mark.evan.flanagan at gmail.com> wrote:
> Hello everyone,
>
> Hopefully issues with ParGap are on-topic for the GAP forum.
>
> Running ParGap with open mpi. ParList works with a simple function
> loaded into ParGap with ParRead, eg ParList([1..10],testfunc) when
>
> testfunc:= function(x) return x+x; end;;
>
> is used, but in more complicated use cases,
> ParList(producehoms(3),loopofhom) does not work:
>
> gap> ParList(producehoms(3),loopofhom);
> Error, Variable: 'f1' must have a value
> Error, List Assignment: <rhss> must be a list with the same length as
> <positions> (14\
> ) in
> result{range} := tmp; called from
> <function "ParList">( <arguments> )
> called from read-eval loop at line 3 of *stdin*
> you can replace <rhss> via 'return <rhss>;'
> brk> Error, Variable: 'f1' must have a value
>
> producehoms(3) makes a list of homomorphisms and loopofhom is a
> function, and f1 is a generator of a group loaded in with ParRead.
> List(producehoms(3),loopofhom) works as expected on master, and it
> seems like ParRead worked because
>
> SendRecvMsg("List(producehoms(3),loopofhom)",1);
>
> produces the expected output.
>
> Any thoughts on why ParList isn't working right? Would it just be
> easier to parallelize my code manually, rather than relying on
> ParList? Any advice is appreciated.
>
> Mark
I think this is not a problem in ParGap: one can easily reproduce
an instance of the same problem without ParGap:
gap> F:=FreeGroup("f1","f2");
<free group on the generators [ f1, f2 ]>
gap> f1;
Error, Variable: 'f1' must have a value
not in any function at line 2 of *stdin*
This happens because there is no variable in GAP named 'f1'.
Instead, you can access generators of the group like here:
gap> F.1;
f1
Alternatively, you may call 'AssignGeneratorVariables':
gap> AssignGeneratorVariables(F);
#I Assigned the global variables [ f1, f2 ]
gap> f1;
f1
but then remember to call it each time you define a new
group with the same letter denoting generators, otherwise
f1 may still point to a generator of the former group.
Hope this helps,
Alexander
More information about the Forum
mailing list