It seems like you've done a good job with it anyway. Thanks for the 
description.

Bill.

On Thursday, 13 July 2017 20:46:21 UTC+2, bluescarni wrote:
>
> mppp also uses a small value optimisation. The number of limbs that can be 
> stored without dynamic memory allocation can be selected at compile time, 
> and the benchmarks on the website are done using 1 limb (64 bits) of static 
> storage.
>
> I can think of a few things that might influence positively mppp's 
> performance with respect to FLINT:
>
> - inlining (as mppp is header-only) avoids the overhead of function calls 
> and might allow the compiler to optimise better.
> - mppp does not do automatic downsizing, once you are using dynamic 
> storage it's up to you to demote to a static integer. I would imagine this 
> saves a few branches with respect to FLINT.
> - I spent a lot of time tinkering with the add/sub/mul code, trying to 
> find the code flow/layout that would squeeze out the best performance for 
> small operands. Maybe I just got lucky with a specific way of arranging the 
> code particularly friendly to GCC, but I don't know really - I am not a 
> low-level/assembly type of guy. I just tried many different variations and 
> picked the one that performed better.
>
> Cheers,
>
>   Francesco.
>
> On 13 July 2017 at 12:25, 'Bill Hart' via sage-devel <
> sage-...@googlegroups.com <javascript:>> wrote:
>
>> So why is it faster than Flint say? Except for the overhead in the Flint 
>> fmpz type, which uses a single word initially and only upgrades to an mpz_t 
>> on overflow, it should currently be doing more allocations than Flint. And 
>> Flint should be faster for something like a dot product, especially if the 
>> integers are all small, since it never actually allocates mpz_t's in that 
>> case. What is the new innovation?
>>
>> Bill.
>>
>> On Wednesday, 12 July 2017 16:00:16 UTC+2, bluescarni wrote:
>>>
>>> In the benchmarks I use the C++ interfaces of FLINT and 
>>> Boost.Multiprecision only for ease of initialization/destruction. The bulk 
>>> of the operations is performed using directly the C API of FLINT and GMP. 
>>> mp++ itself has some moderate template metaprogramming in place, but for 
>>> instance it is currently lacking expression templates support (unlike 
>>> fmpzxx), the focus at the moment being on fast low-level primitives 
>>> (add/sub/mul/addmul etc.).
>>>
>>> Cheers,
>>>
>>>   Francesco.
>>>
>>> On 12 July 2017 at 15:13, 'Bill Hart' via sage-devel <
>>> sage-...@googlegroups.com> wrote:
>>>
>>>> Beware, Bernard Parisse has just helped me track down why the Flint 
>>>> timings for the sparse division only benchmark looked so ridiculously low. 
>>>> It turns out that due to an accident of interfacing between Nemo and 
>>>> Flint, 
>>>> it was using reflected lexicographical ordering instead of true 
>>>> lexicographical ordering. If I had labelled them "exact division", instead 
>>>> of "quotient only" and not included the x^(n - 3) term in the benchmark 
>>>> itself, the timings could be considered correct (though Giac would also 
>>>> have been able to do the computation much faster in that case). But 
>>>> unfortunately, this discovery means I had to change the timings for Flint 
>>>> for that benchmark. It is now correct on the blog.
>>>>
>>>> The timings for mppp are really good. I'm surprised you beat the Flint 
>>>> timings there, since we use pretty sophisticated templating in our C++ 
>>>> interface. But clearly there are tricks we missed!
>>>>
>>>> Bill. 
>>>>
>>>> On Wednesday, 12 July 2017 12:16:33 UTC+2, bluescarni wrote:
>>>>>
>>>>> Interesting timings, they give me some motivation to revisit the dense 
>>>>> multiplication algorithm in piranha :)
>>>>>
>>>>> As an aside (and apologies if this is a slight thread hijack?), I have 
>>>>> been spending some time in the last few weeks decoupling the 
>>>>> multiprecision 
>>>>> arithmetic bits from piranha into its own project, called mp++:
>>>>>
>>>>> https://github.com/bluescarni/mppp
>>>>>
>>>>> So far I have extracted the integer and rational classes, and 
>>>>> currently working on the real class (arbitrary precision FP).
>>>>>
>>>>> Cheers,
>>>>>
>>>>>   Francesco.
>>>>>
>>>> -- 
>>>> 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+...@googlegroups.com.
>>>> To post to this group, send email to sage-...@googlegroups.com.
>>>> Visit this group at https://groups.google.com/group/sage-devel.
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>> -- 
>> 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+...@googlegroups.com <javascript:>.
>> To post to this group, send email to sage-...@googlegroups.com 
>> <javascript:>.
>> Visit this group at https://groups.google.com/group/sage-devel.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
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 post to this group, send email to sage-devel@googlegroups.com.
Visit this group at https://groups.google.com/group/sage-devel.
For more options, visit https://groups.google.com/d/optout.

Reply via email to