I can confirm that the PR fixes this performance regression. I have 
provided more details in a comment on the PR.

Thanks again for the quick resolution.

Best Regards,
Richard

Carl Richard Theodor Schneider schrieb am Donnerstag, 12. Januar 2023 um 
00:07:07 UTC+1:

> > First of all, you're really on your own as far as Python2 is concerned. 
>
> Yes, I know and understand this. The intention behind this was merely to 
> provide another data point, as Nils noticed.
>
> > It's not clear from your message whether you saw any difference from 
> > python3 vs "sage --python". 
> > Could you clarify? 
>
> The time for both `sage` and `sage --python` was >7s for both in the sage 
> 9.x-case, while the native usage of fpylll from within python3 ran in the 
> expected time (same order of magnitude as sage8.x and py2). The three test 
> cases for the recent version are in line 35-40, 42-47 and 49-53 of the log.
>
> > Could you please also say what versions of libfplll you were trying. 
>
> In the case where everything worked fine, the versions are:
> sage: SageMath version 8.9, Release Date: 2019-09-29
> py: 2.7.18 (default, Apr 19 2020, 21:45:35)     [GCC 9.3.0]
> fpylll: 0.5.1dev
> fplll: 5.3.2
>
> In the case where sage was slow, but py3 performed as expected, the code 
> ran with these versions:
> sage: SageMath version 9.6, Release Date: 2022-05-15
> py: 3.10.5 (main, Jun  6 2022, 12:05:50) [GCC 11.3.0]
> fpylll: 0.5.7
> fplll: 5.4.2
>
>
> I'll apply the patch from the PR to verify whether it resolves the problem 
> and report back (probably in the afternoon for UTC+1).
>
> Best Regards and thanks for the help so far,
> Richard
>
> martinr...@googlemail.com schrieb am Mittwoch, 11. Januar 2023 um 
> 23:30:56 UTC+1:
>
>> Thanks, it’s this function and a similar one the other way, i.e. an 
>> FPyLLL issue when used inside Sage: 
>>
>> ``` 
>> cdef int assign_mpz(mpz_t& t, value) except -1: 
>> """ 
>> Assign Python integer to Z_NR[mpz_t] 
>> """ 
>> if isinstance(value, int) and PY_MAJOR_VERSION == 2: 
>> mpz_set_si(t, PyInt_AS_LONG(value)) 
>> return 0 
>> if isinstance(value, long): 
>> mpz_set_pylong(t, value) 
>> return 0 
>> if have_sage: 
>> from sage.rings.integer import Integer 
>> if isinstance(value, Integer): 
>> value = long(value) 
>> mpz_set_pylong(t, value) 
>> return 0 
>> ``` 
>>
>> Per your profiler output we’re calling this 2*250*250 times, i.e. once to 
>> convert in and once to convert out. 
>>
>> This should be fixed with this PR: 
>>
>> https://github.com/fplll/fpylll/pull/239 
>>
>> I’ll cut a new release and update https://trac.sagemath.org/ticket/34870 
>>
>> Cheers, 
>> Martin 
>>
>> On Wed, Jan 11 2023, Nils Bruin wrote: 
>> > Of course going back to py2 is not a solution but the data point is 
>> > indicative that a regression was introduced, and that would be worth 
>> > solving. It looks to me the following code is what exhibits the 
>> problematic 
>> > behaviour. Run on a recent sage (9.7 or so): 
>> > 
>> > sage: from fpylll import * 
>> > sage: FPLLL.set_random_seed(0) 
>> > sage: dim = 250 
>> > ....: bits = 3 
>> > ....: A = IntegerMatrix.random(dim, "uniform", bits = bits) 
>> > sage: %prun B = LLL.reduction(A) 
>> > 
>> > (with profiling to see if anything comes to light): 
>> > 
>> > 19250003 function calls (18500003 primitive calls) in 6.983 seconds 
>> > 
>> > Ordered by: internal time 
>> > 
>> > ncalls tottime percall cumtime percall filename:lineno(function) 
>> > 125000 0.665 0.000 3.127 0.000 <frozen 
>> > importlib._bootstrap>:921(_find_spec) 
>> > 375000/125000 0.612 0.000 6.368 0.000 <frozen 
>> > importlib._bootstrap>:1022(_find_and_load) 
>> > 1 0.548 0.548 6.983 6.983 <string>:1(<module>) 
>> > 125000 0.504 0.000 1.525 0.000 <frozen 
>> > importlib._bootstrap_external>:1536(find_spec) 
>> > 375000 0.389 0.000 0.719 0.000 <frozen 
>> > importlib._bootstrap>:179(_get_module_lock) 
>> > 375000/125000 0.326 0.000 5.472 0.000 <frozen 
>> > importlib._bootstrap>:987(_find_and_load_unlocked) 
>> > 625000 0.268 0.000 0.668 0.000 <frozen 
>> > importlib._bootstrap_external>:126(_path_join) 
>> > 375000 0.264 0.000 0.328 0.000 <frozen 
>> > importlib._bootstrap>:125(release) 
>> > 375000 0.261 0.000 0.325 0.000 <frozen 
>> > importlib._bootstrap>:100(acquire) 
>> > 625000 0.249 0.000 0.331 0.000 <frozen 
>> > importlib._bootstrap_external>:128(<listcomp>) 
>> > 375000 0.206 0.000 0.273 0.000 <frozen 
>> > importlib._bootstrap>:71(__init__) 
>> > 125000 0.200 0.000 0.200 0.000 {built-in method posix.stat} 
>> > ........... 
>> > 
>> > Nevermind that the times don't add up, we see a profile that is 
>> completely 
>> > dominated by import stuff! So it looks to me we may have ended up with 
>> an 
>> > import in some fairly tight loop. Regardless of whether this is the 
>> actual 
>> > source of the problem observed here, I think it's problematic in its 
>> own 
>> > right. 
>>
>>
>> -- 
>>
>> _pgp: https://keybase.io/martinralbrecht 
>> _www: https://malb.io 
>> _prn: he/him or they/them 
>>
>>

-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-devel+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sage-devel/fa26fce0-b243-4251-b2fe-4c676158382en%40googlegroups.com.

Reply via email to