[GAP Forum] Problem with ParGap and ParList
Alexander Hulpke
hulpke at math.colostate.edu
Fri Oct 11 19:06:11 BST 2013
On Oct 11, 2013, at 10/11/13 8:43, Mark Flanagan <mark.evan.flanagan at gmail.com> wrote:
> 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'.
The problem comes up in the communication between processes: ParGAP sends objects to a slave process by printing it into a string and sending this string for evaluation to the other machine. At this point the evaluation of `f1' happens, even if your code does not do so (but sends group elements to the other machine).
Regards,
Alexander Hulpke
>
> 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
> _______________________________________________
> Forum mailing list
> Forum at mail.gap-system.org
> http://mail.gap-system.org/mailman/listinfo/forum
More information about the Forum
mailing list