How to use math functions in dcompute?

Sobaya sobaya007 at gmail.com
Thu Aug 30 10:34:33 UTC 2018


On Monday, 27 August 2018 at 12:47:45 UTC, Nicholas Wilson wrote:
> On Monday, 27 August 2018 at 09:57:18 UTC, Sobaya wrote:
>> On Monday, 27 August 2018 at 09:41:34 UTC, 9il wrote:
>>> On Monday, 27 August 2018 at 08:25:14 UTC, Sobaya wrote:
>>>> I'm using dcompute(https://github.com/libmir/dcompute).
>>>>
>>>> In the development, I have got to use math functions such as 
>>>> sqrt in @compute function.
>>>>
>>>> But LDC says "can only call functions from other @compute 
>>>> modules in @compute code", so can't I call any math 
>>>> functions with dcompute?
>>>>
>>>> Is there any way to use predefined math functions in 
>>>> dcompute?
>>>>
>>>> Thanks.
>>>
>>> You may want to try ldc.intrinsics / mir.math.common
>>
>> Do you mean llvm_sqrt in ldc.intrinsics?
>>
>> These functions are also not @compute code, so they cause the 
>> same error.
>
> Thanks for bringing this to my attention, will fix soon. In the 
> meantime you may declare your own intrinsics in a @compute 
> module and it should work. as in
>
> @compute module mymath;
>
> pragma(LDC_intrinsic, "llvm.sqrt.f#")
>     T llvm_sqrt(T)(T val)
>         if (__traits(isFloating, T));
>
>
> This will work if you are targeting CUDA, SPIRV may not like it 
> because the backend is less... mature.

Thank you for replaying.

Surely the definition you told me works for "sqrt".
But "cos" and "sin" does not work.
The error message is

LLVM ERROR: Cannot select: 0xd76ffd8: f32 = fcos 
ConstantFP:f32<0.000000e+00>
    0xd76ff70: f32 = ConstantFP<0.000000e+00>

What's wrong?


More information about the Digitalmars-d-learn mailing list