[vector] Is Mask inverted in XXXVector.xxxAll(Mask<>)?

Vladimir Ivanov vladimir.x.ivanov at oracle.com
Fri Mar 22 00:46:32 UTC 2019


> Could you please review the patch for the fix:
> http://cr.openjdk.java.net/~vdeshpande/VectorAPI/8221176/webrev.00/

Looks good.

 From API perspective, what do people think about Vector.blend() as it 
is specified now?

It looks naturally when you compare it to other masked operations:

   a.op(m)       == (m_i ? op(a_i)     : a_i)

   a.op(b, m)    == (m_i ? op(a_i,b_i) : a_i)

   a.blend(b, m) == (m_i ? b_i         : a_i) // ok

but it's confusing (at least, to me) when you see it alone:

   a.blend(b, m);

I read it as 'blend(a,b,m)' and the first interpretation usually is 
opposite to the actual behavior.

Maybe it can be improved by different naming?

Best regards,
Vladimir Ivanov

> -----Original Message-----
> From: Vladimir Ivanov [mailto:vladimir.x.ivanov at oracle.com]
> Sent: Wednesday, March 20, 2019 2:48 PM
> To: Deshpande, Vivek R <vivek.r.deshpande at intel.com>; Lev Serebryakov <lev at serebryakov.spb.ru>; panama-dev at openjdk.java.net
> Subject: Re: [vector] Is Mask inverted in XXXVector.xxxAll(Mask<>)?
> 
> 
>> It is selecting values from the broadcasted vector from base scalar
>> value(used as starting point) based on the mask, instead of the vector on which we want to reduce.
>> I think the arguments to blend  passed should be interchanged.
> 
> Yes, it agrees with my analysis of the problem (added to JDK-8221176).
> 
> Best regards,
> Vladimir Ivanov
> 
>> -----Original Message-----
>> From: panama-dev [mailto:panama-dev-bounces at openjdk.java.net] On
>> Behalf Of Vladimir Ivanov
>> Sent: Wednesday, March 20, 2019 2:21 PM
>> To: Lev Serebryakov <lev at serebryakov.spb.ru>;
>> panama-dev at openjdk.java.net
>> Subject: Re: [vector] Is Mask inverted in XXXVector.xxxAll(Mask<>)?
>>
>> Thanks for the report, Lev!
>>
>> Yes, it's a bug. Filed
>> https://bugs.openjdk.java.net/browse/JDK-8221176
>>
>> Best regards,
>> Vladimir Ivanov
>>
>> On 19/03/2019 09:54, Lev Serebryakov wrote:
>>>
>>>     This code gives me 100.0f and not expected 10.0f (Preferred Spices
>>> in
>>> 256 on my system, as I don't have AVX-512):
>>>
>>> FloatVector.FloatSpecies PFS = FloatVector.preferredSpecies();
>>> FloatVector.Mask m = FloatVector.maskFromValues(PFS,
>>>      true, false, true, false, true, false, true, false ); FloatVector
>>> v = FloatVector.fromArray(PFS, new float[]
>>>       { 1.0f, 10.0f, 2.0f, 20.0f, 3.0f, 30.0f, 4.0f, 40.0f }, 0 );
>>> float sum = v.addAll(m);
>>>
>>>
>>>     Same problem with `mulAll()`.
>>>


More information about the panama-dev mailing list