Re: [eigen] Matrix product crashes when compiled with MSVC 2010 in release |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/eigen Archives
]
- To: eigen@xxxxxxxxxxxxxxxxxxx
- Subject: Re: [eigen] Matrix product crashes when compiled with MSVC 2010 in release
- From: Hauke Heibel <hauke.heibel@xxxxxxxxxxxxxx>
- Date: Fri, 13 Aug 2010 16:14:17 +0200
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=gamma; h=domainkey-signature:mime-version:received:received:in-reply-to :references:date:message-id:subject:from:to:content-type :content-transfer-encoding; bh=CYD8Cna+UAmcCS3Ey2HF/5lCk3nOXW3hIJ167yRLBZ8=; b=XVn40ZCcjqj9j+2OerXpyZxbeQkRRypV8oUFwAF9lOvWRNrVK2E0PhBD+SdDfZdeGp Tjn4RLIsl8nHbkvTi24ThZNzVavKmNO1VbXunbiN2r5KMMtMATiY1Msa08g2rdKZfIg7 ybr0Rb06xFZTCylxn5HUafa8Xzhfq+j3VXqOw=
- Domainkey-signature: a=rsa-sha1; c=nofws; d=googlemail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:content-transfer-encoding; b=t/3xbhYxSYuT1Nz9s0Qrvq3yls1znZcYGUtCjSdn2KH9ILtuSx29+sfz0VjT/ex5f0 Z7//OfeYfclX35q/WOfqk1bD/IHJQjkK6tL0Uzc3V8YmMaZk7uzQopYQ6aRLHRsT5DGz U9IKSL0P34d0KK2n11nvql95it2DWu5v2l6ys=
I already tried all simple things such as using directly the SSE
intrinsics and introducing temporaries. It is just a nasty
optimization error of MSVC.
- Hauke
On Fri, Aug 13, 2010 at 4:12 PM, Benoit Jacob <jacob.benoit.1@xxxxxxxxx> wrote:
> 2010/8/13 Benoit Jacob <jacob.benoit.1@xxxxxxxxx>:
>> 2010/8/13 Hauke Heibel <hauke.heibel@xxxxxxxxxxxxxx>:
>>> On Fri, Aug 13, 2010 at 4:00 PM, Benoit Jacob <jacob.benoit.1@xxxxxxxxx> wrote:
>>>> 2010/8/13 Hauke Heibel <hauke.heibel@xxxxxxxxxxxxxx>:
>>>> Unfortunately, the patch creates a wrong result:
>>>>
>>>> +#if defined(EIGEN_VECTORIZE) && defined(_MSC_VER) && !defined(_WIN64)
>>>> + const AccPacket tmp1 = ei_pmul(alpha,c);
>>>> + const AccPacket tmp2 = ei_pmul(alpha,r);
>>>> + r = ei_padd(tmp1,tmp2);
>>>> +#else
>>>> r = ei_pmadd(c,alpha,r);
>>>> +#endif
>>>>
>>>> Here, the current code r=pmadd(c,alpha,r) does (in pseudocode):
>>>>
>>>> r = alpha*c+r.
>>>>
>>>> But your variant does instead:
>>>>
>>>> r = alpha*c + alpha*r
>>>
>>> Ups, too hasty.
>>
>> Here's a fun counter-proposal: if the issue is really that MSVC
>> mis-compiles ei_pmadd, how about implementing it with asm volatile?
>
> Ah, something to try first: in this acc() method, try replacing this
> ei_pmadd(x,y,z) by
>
> ei_padd(ei_pmul(x,y), z)
>
> i.e. just don't use our ei_pmadd function. My suspiscion is that
> ei_pmadd might be mis-compiled because it is defined (in
> genericpacketmath.h) before the ei_padd and ei_pmul receive their
> specializations (under arch/SSE/) i.e. that would again be just a
> problem with templates support in MSVC.
>
> Benoit
>
>>
>> Benoit
>>
>
>
>