Skip to content

libsingular mpolynomial from dict is slow #16040

Open
@vbraun

Description

@vbraun

Creating multivariate polynomials from dictionaries is slow and grinds to a halt around 100k terms. In particular, it seems to grow worse than O(N^2). Unpickling falls precisely into this trap.

With my C function profiler from #16038 we see that the problem is in p_Add_q, which presumably also does some sorting:

sage: R = PolynomialRing(QQ, 16, 'a')
sage: # p = polynomial with 26492 terms
sage: p_dict = p.dict()
sage: %crun R(p_dict)
PROFILE: interrupts/evictions/bytes = 196/5/9880
Using local file /home/vbraun/Code/sage.git/local/bin/python.
Using local file /home/vbraun/.sage/temp/desktop/12236/tmp_wU2dXk.perf.
Removing pthread_getattr_np from all stack traces.
Total: 196 samples
     174  88.8%  88.8%      174  88.8% p_Add_q__FieldQ_LengthSix_OrdPosNomogPos
       5   2.6%  91.3%       19   9.7% __pyx_pf_4sage_5rings_10polynomial_8polydict_6ETuple_10__getitem__ (inline)
       5   2.6%  93.9%        5   2.6% convert_3way_to_object (inline)
       3   1.5%  95.4%        3   1.5% PyInt_FromLong
       3   1.5%  96.9%       11   5.6% PyObject_RichCompare
       2   1.0%  98.0%        2   1.0% _IO_vfwscanf
       2   1.0%  99.0%        2   1.0% int_compare
       1   0.5%  99.5%        1   0.5% adjust_tp_compare
       1   0.5% 100.0%        1   0.5% omAllocBinPage
       0   0.0% 100.0%        1   0.5% DefRingParlp
       0   0.0% 100.0%       22  11.2% PyEval_EvalCode
       0   0.0% 100.0%       22  11.2% PyEval_EvalCodeEx
       0   0.0% 100.0%       22  11.2% PyEval_EvalFrameEx
       0   0.0% 100.0%       22  11.2% PyObject_Call
       0   0.0% 100.0%       22  11.2% PyRun_FileExFlags
       0   0.0% 100.0%       22  11.2% PyRun_SimpleFileExFlags
       0   0.0% 100.0%       22  11.2% PyRun_StringFlags
       0   0.0% 100.0%       22  11.2% Py_Main
       0   0.0% 100.0%        3   1.5% __Pyx_PyInt_From_int (inline)
       0   0.0% 100.0%       22  11.2% __Pyx_PyObject_Call (inline)
       0   0.0% 100.0%        1   0.5% __gmpz_init
       0   0.0% 100.0%        1   0.5% __gmpz_init_set
       0   0.0% 100.0%       22  11.2% __libc_start_main
       0   0.0% 100.0%       22  11.2% __pyx_f_4sage_9structure_11coerce_maps_24DefaultConvertMap_unique__call_
       0   0.0% 100.0%       22  11.2% __pyx_pf_4sage_5rings_10polynomial_28multi_polynomial_libsingular_27MPolynomialRing_libsingular_12_element_constructor_ (inline)
       0   0.0% 100.0%       22  11.2% __pyx_pf_4sage_9structure_6parent_6Parent_34__call__ (inline)
       0   0.0% 100.0%       22  11.2% __pyx_pw_4sage_5rings_10polynomial_28multi_polynomial_libsingular_27MPolynomialRing_libsingular_13_element_constructor_
       0   0.0% 100.0%       19   9.7% __pyx_pw_4sage_5rings_10polynomial_8polydict_6ETuple_11__getitem__
       0   0.0% 100.0%       22  11.2% __pyx_pw_4sage_9structure_6parent_6Parent_35__call__
       0   0.0% 100.0%        1   0.5% _omAllocBin (inline)
       0   0.0% 100.0%       22  11.2% _start
       0   0.0% 100.0%       22  11.2% call_function (inline)
       0   0.0% 100.0%       22  11.2% do_call (inline)
       0   0.0% 100.0%        1   0.5% do_richcmp (inline)
       0   0.0% 100.0%       22  11.2% exec_statement (inline)
       0   0.0% 100.0%       22  11.2% ext_do_call (inline)
       0   0.0% 100.0%       22  11.2% fast_function (inline)
       0   0.0% 100.0%       22  11.2% function_call
       0   0.0% 100.0%        3   1.5% nlInit2gmp
       0   0.0% 100.0%        1   0.5% nlNormalize (inline)
       0   0.0% 100.0%        1   0.5% omAllocBinFromFullPage
       0   0.0% 100.0%        1   0.5% omAllocNewBinPage (inline)
       0   0.0% 100.0%       22  11.2% run_mod (inline)
       0   0.0% 100.0%        2   1.0% sage_gmp_malloc
       0   0.0% 100.0%        2   1.0% sage_malloc
       0   0.0% 100.0%        1   0.5% try_3way_to_rich_compare (inline)

CC: @malb @burcin @sagetrac-jkeitel @simon-king-jena

Component: algebra

Issue created by migration from https://trac.sagemath.org/ticket/16040

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions