-
Notifications
You must be signed in to change notification settings - Fork 160
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
performance enhancements in subgroup lattice #3384
Conversation
Do not use `Closure` but create subgroup from scratch to avoid forcing potentially memory-intensive (and unneeded) stabilier chains. Use fixed pre-images for modulo pcgs elements t avoid redundant storing of same elements. Example (too large for routine test): Max 4 of HN on 1920 points, ConjugacyClassesSubgroups.
This can give speedup if closure is with normal subgroup.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi @hulpke, I've had a look and tried to understand what's going on. The cache part makes sense to me. However I couldn't work out your rationale behind some other changes, so I've added a couple of questions in the hope that you can satisfy my genuine curiosity.
It's clear that you've not changed the mathematical correctness of the function, and I'll take your word for it that the performance is now better, so I'm happy to approve.
else | ||
a:=ClosureGroup(ker,List(i,j->PcElementByExponentsNC(pcgs,j))); | ||
#a:=ClosureGroup(ker,List(i,j->pcelm(j)):knownClosureSize:=asz); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why did you replace the ClosureGroup
with the SubgroupNC
? Is it faster? And given the replacement, why have you kept the ClosureGroup
line as a comment?
@@ -736,6 +736,8 @@ BindGlobal("DoClosurePrmGp",function( G, gens, options ) | |||
fi; | |||
od; | |||
else | |||
o:=ValueOption("knownClosureSize"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What do you intend for the knownClosureSize
value option: if you're not using it in the code in the rest of the PR, and it's not documented, is there any point in it being there?
@wilfwilson This is a bit complicated: The "knownClosureSize" was the first attempt, it helped, but not enough. I suspect there will be other cases where it should be used, which is the reason for keeping the code in. |
Thanks for the explanation 🙂 @hulpke |
With this, GAP can calculate the subgroups of HNM4 on 1920 points -- before runs out of memory.