-
Notifications
You must be signed in to change notification settings - Fork 161
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 problem with creating group actions on cosets #5040
Comments
This is not so much a problem with actions, but in creating the transversal (this is probably a bad example for the algorithm used there with little reduction to shorter orbits being possible.)
takes most of the time, then
(which is all that |
Thanks @hulpke. Concerning |
@ThomasBreuer |
Just to say that I think other factors are at play, too, e.g. the lack of fast hash tables in core GAP (we do have them in To elaborate on that, let me point out that the subgroup
Thus computing the orbit of this set under
This is slow because it essentially uses
So that's a total of ~34 seconds. Now let's compare with this trivial orbit algorithm implementation in Julia, using a hash set: function bahn(pt::T, generators, action) where T
orb = [pt]
dict = Dict(pt => 1)
for b in orb
for g in generators
c = action(b, g)::T
x = get(dict, c, nothing)
if x === nothing
push!(orb, c)
dict[c] = length(orb)
end
end
end
return orb
end Then I get:
Note that this is internally using GAP permutations and all. I can get this to a bit under 3 seconds by using "native" Julia permutations. So, I think in this example perhaps really basic things are also playing a factor, besides Magma perhaps using a fundamentally better algorithm for this particular problem? |
Currently GAP does not hash integers lists under permutation actions -- this is clearly an oversight. With this added, the |
Gives significant speedup to orbit calculations of permutations on integer lists. This has releveance for gap-system#5040
Gives significant speedup to orbit calculations of permutations on integer lists. This has releveance for gap-system#5040
Gives significant speedup to orbit calculations of permutations on integer lists. This has releveance for gap-system#5040
Gives significant speedup to orbit calculations of permutations on integer lists. This has releveance for gap-system#5040
Gives significant speedup to orbit calculations of permutations on integer lists. This has releveance for gap-system#5040
Gives significant speedup to orbit calculations of permutations on integer lists. This has releveance for gap-system#5040
Gives significant speedup to orbit calculations of permutations on integer lists. This has releveance for gap-system#5040
Gives significant speedup to orbit calculations of permutations on integer lists. This has releveance for gap-system#5040
Gives significant speedup to orbit calculations of permutations on integer lists. This has releveance for #5040
Update after the release of GAP 4.13.0:
The mentioned (alternative) orbit computations on pairs are apparently faster in 4.13.0 (again, on hamal) than they were in the tests mentioned in September 2022.
|
Rewrite a condition, mapping with inverse permutations, to test for a small set of numbers rather than a large one. Doing so can give a substantial speedup for constructing certain right transversals. Also increase of storage limits to reflect hardware progress over 20 years. This helps with gap-system#5040
Rewrite a condition, mapping with inverse permutations, to test for a small set of numbers rather than a large one. Doing so can give a substantial speedup for constructing certain right transversals. Also increase of storage limits to reflect hardware progress over 20 years. This helps with gap-system#5040
Rewrite a condition, mapping with inverse permutations, to test for a small set of numbers rather than a large one. Doing so can give a substantial speedup for constructing certain right transversals. Also increase of storage limits to reflect hardware progress over 20 years. This helps with gap-system#5040
I have a change (in my work repository) that speeds this up by a factor of over 2 compared to the 4.13 release -- proportionally one would expect a time of 2442941. |
With a further change it now takes (equivalent of) 30 seconds. |
Speed up these operations by finding a better subgroup series, defined by actions, and use these actions if possible. Added example and clarify that ordering of points in `FactorCosetAction` is not guaranteed. This resolves gap-system#5040, gap-system#5337
Speed up these operations by finding a better subgroup series, defined by actions, and use these actions if possible. Added example and clarify that ordering of points in `FactorCosetAction` is not guaranteed. This resolves gap-system#5040, gap-system#5337
Speed up these operations by finding a better subgroup series, defined by actions, and use these actions if possible. Added example and clarify that ordering of points in `FactorCosetAction` is not guaranteed. This resolves gap-system#5040, gap-system#5337
Speed up these operations by finding a better subgroup series, defined by actions, and use these actions if possible. Added example and clarify that ordering of points in `FactorCosetAction` is not guaranteed. This resolves gap-system#5040, gap-system#5337
Speed up these operations by finding a better subgroup series, defined by actions, and use these actions if possible. Added example and clarify that ordering of points in `FactorCosetAction` is not guaranteed. This resolves gap-system#5040, gap-system#5337
Speed up these operations by finding a better subgroup series, defined by actions, and use these actions if possible. Added example and clarify that ordering of points in `FactorCosetAction` is not guaranteed. This resolves gap-system#5040, gap-system#5337
Very nice: with @hulpke's PR #5689 the timings on a specific test server I see these timings:
So that's great, it's on the same order of magnitude. |
Speed up these operations by finding a better subgroup series, defined by actions, and use these actions if possible. Added example and clarify that ordering of points in `FactorCosetAction` is not guaranteed. This resolves gap-system#5040, gap-system#5337
Speed up these operations by finding a better subgroup series, defined by actions, and use these actions if possible. Added example and clarify that ordering of points in `FactorCosetAction` is not guaranteed. This resolves gap-system#5040, gap-system#5337
Rewrite a condition, mapping with inverse permutations, to test for a small set of numbers rather than a large one. Doing so can give a substantial speedup for constructing certain right transversals. Also adjust of storage limits to reflect hardware progress over 20 years. Speed up these operations by finding a better subgroup series, defined by actions, and use these actions if possible. Added example and clarify that ordering of points in `FactorCosetAction` is not guaranteed. This resolves gap-system#5040, gap-system#5337
@frankluebeck and I have observed that computing the permutation action of a group on the right cosets of a subgroup of large index is very slow in GAP, compared with Magma.
As an example, take the sporadic simple Rudvalis group as a permutation group on 4060 points, and compute the action on the cosets of a maximal subgroup of the structure L2(25).2^2 (order 31200, index 4677120).
In GAP, a natural way to formulate this is as follows.
The same in Magma looks as follows.
(Yes, the numbering of maximal subgroups in GAP and Magma differs. The 7th class in GAP --ordered by decreasing subgroup order-- corresponds to the 8th class in Magma.)
We see that Magma is several orders of magnitude faster than GAP.
The text was updated successfully, but these errors were encountered: