[Cython] Too many instantiations with fused type memoryviews
Hi, FYI: Cython instantiates fused type routines with memoryview arguments unnecessarily many times. Example: ``` ctypedef fused idx_t: short long # Cython 0.20.1 instantiates this function 128 times, # even though only 2 would be needed def fubar_128(idx_t[:] a, idx_t[:] b, idx_t[:] c, idx_t[:] d, idx_t[:] e, idx_t[:] f, idx_t[:] g): print("HALLO") def fubar_2(idx_t a, idx_t b, idx_t c, idx_t d, idx_t e, idx_t f, idx_t g): print("HULLO") ``` $ cython cymod.pyx $ cython --version Cython version 0.20.1 $ grep -c 'print("HALLO")' cymod.c 128 $ grep -c 'print("HULLO")' _cymod.c 2 The n**m explosion starts to hurt quite quickly when there are several array arguments and more than one fused type. I think this issue is also accompanied by some signature resolution bugs (I'll try to come up with an example case). Cheers, -- Pauli Virtanen ___ cython-devel mailing list cython-devel@python.org https://mail.python.org/mailman/listinfo/cython-devel
Re: [Cython] Too many instantiations with fused type memoryviews
Pauli Virtanen, 08.03.2014 21:11: > FYI: Cython instantiates fused type routines with memoryview arguments > unnecessarily many times. > > Example: > ``` > ctypedef fused idx_t: > short > long > > # Cython 0.20.1 instantiates this function 128 times, > # even though only 2 would be needed > def fubar_128(idx_t[:] a, > idx_t[:] b, > idx_t[:] c, > idx_t[:] d, > idx_t[:] e, > idx_t[:] f, > idx_t[:] g): > print("HALLO") > > def fubar_2(idx_t a, > idx_t b, > idx_t c, > idx_t d, > idx_t e, > idx_t f, > idx_t g): > print("HULLO") > ``` > $ cython cymod.pyx > $ cython --version > Cython version 0.20.1 > $ grep -c 'print("HALLO")' cymod.c > 128 > $ grep -c 'print("HULLO")' _cymod.c > 2 > > The n**m explosion starts to hurt quite quickly when there are several > array arguments and more than one fused type. I think this issue is > also accompanied by some signature resolution bugs (I'll try to come > up with an example case). Yes, this is a known problem. The work-around is to ctypedef the memory view type, not just the dtype. http://thread.gmane.org/gmane.comp.python.cython.user/10437 Stefan ___ cython-devel mailing list cython-devel@python.org https://mail.python.org/mailman/listinfo/cython-devel
Re: [Cython] Too many instantiations with fused type memoryviews
08.03.2014 22:40, Stefan Behnel kirjoitti: [clip] > Yes, this is a known problem. The work-around is to ctypedef the > memory view type, not just the dtype. > > http://thread.gmane.org/gmane.comp.python.cython.user/10437 Thanks, I missed that. Re: arguments in the previous thread --- I think it would indeed be better if memoryviews would not invoke cross-product behavior. If scalars work in one way, also arrays should work in the same way. Pauli ___ cython-devel mailing list cython-devel@python.org https://mail.python.org/mailman/listinfo/cython-devel