[Libclc-dev] Add initial support for half precision builtins (take 3)
Jeroen Ketema via Libclc-dev
libclc-dev at lists.llvm.org
Wed May 16 12:20:28 PDT 2018
> On 16 May 2018, at 00:59, Jan Vesely <jan.vesely at rutgers.edu> wrote:
>
> Hi,
>
> thank you both, for fast feedback. I've attached v2 that should address
> most of the comments. I left larger whitespace cleanup for another day.
>
>
> On Tue, 2018-05-15 at 22:46 +0200, Jeroen Ketema via Libclc-dev wrote:
>> Hi Jan,
>>
>>> On 15 May 2018, at 05:09, Jan Vesely via Libclc-dev <libclc-dev at lists.llvm.org> wrote:
>>>
>>> Hi,
>>>
>>> I've tried to post this patch but it's too big for the ML (and I don't
>>> know who to bug to get it released).
>>>
>>> It adds basic fp16 builtins. The rest will probably need a fp32 wrapper
>>> (especially the sw implementations of math functions), but that needs
>>> fixed conversion routines.
>>
>> Is that going to fly? Wouldn’t you run into double rounding issues?
>
> It probably will, but it's the fastest solution. The alternative is to
> adapt all sw routines to half precision (including tables). At least
> GCN llvm backend does this for some ops anyway.
>
> Fixing conversion routines is higher priority. We can revisit this
> after.
Yeah, if the aim is just to get something working, then just wrapping
the fp32 code is fine.
One further remark: I think generic/lib/math/modf.inc needs to #undef ZERO.
One question about generic/lib/math/clc_sqrt_impl.inc:
+#define __CLC_NAN (half)NAN
I assume the reason for this is that there’s __builtin_nanh(“”), or something
like that? (The ‘h’ in there is coming from my imagination.)
Otherwise, I don’t have any further comments.
Jeroen
>
> regards,
> Jan
>
>>
>> In addition to Aaron’s comments:
>>
>> +#define HALF_RADIX 2
>> +#define HALF_MAX 0x1.ffcp15h
>> +#define HALF_MIN 0x1.0p-14h
>> +#define HALF_EPSILON 0x1.0p-10h
>>
>> There seems to be both a space and a tab between the macro name and
>> its definition. I also see a few places where indentation is done
>> with a tab, e.g., generic/lib/relational/isunordered.cl.
>>
>> From nan.inc:
>>
>> #if __CLC_FPSIZE == 64
>> #define __CLC_NATN __CLC_XCONCAT(ulong, __CLC_VECSIZE)
>> -#else
>> +#elif __CLC_FPSIZE == 32
>> #define __CLC_NATN __CLC_XCONCAT(uint, __CLC_VECSIZE)
>> +#else
>> +#define __CLC_NATN __CLC_XCONCAT(ushort, __CLC_VECSIZE)
>> #endif
>>
>> Wouldn’t it make more sense to also use “#elif __CLC_FPSIZE == 16”, and maybe #error otherwise? Similar in a few other places.
>>
>> In generic/lib/math/acos.inc:
>>
>> +#else
>> +#define __CLC_CONST(x) xh
>>
>> I think there should be a ## between the x and h.
>>
>> In generic/include/math/clc_ldexp.h, the guarded text in indented, while indentation is not used anywhere else.
>>
>> I see some cases where the "+#if __CLC_FPSIZE > 16” guard does not have a TODO attached to it, is that on purpose?
>>
>> In generic/lib/math/modf.inc casts 0.0f, while generic/lib/math/fract.inc introduces a ZERO macro. Maybe this should be made more uniform (doesn’t have to be as part of this patch).
>>
>> Near the end of the patch the int/vector of short difference is explained in a comment "returns an int, but the vector versions return short”. Maybe add a similar comment to generic/include/clc/relational/floatn.inc?
>>
>> Jeroen
>>
>>>
>>> This should be enough to make clpeak happy (BZ: 96897)
>>>
>>> Jan
>>> --
>>> Jan Vesely <jan.vesely at rutgers.edu><0001-Add-initial-support-for-half-precision-builtins.patch.gz>_______________________________________________
>>> Libclc-dev mailing list
>>> Libclc-dev at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/libclc-dev
>>
>> _______________________________________________
>> Libclc-dev mailing list
>> Libclc-dev at lists.llvm.org <mailto:Libclc-dev at lists.llvm.org>
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/libclc-dev <http://lists.llvm.org/cgi-bin/mailman/listinfo/libclc-dev>
>
> --
> Jan Vesely <jan.vesely at rutgers.edu <mailto:jan.vesely at rutgers.edu>><v2-0001-Add-initial-support-for-half-precision-builtins.patch.gz>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/libclc-dev/attachments/20180516/60dae226/attachment.html>
More information about the Libclc-dev
mailing list