Jump to page: 1 2 3
Thread overview
How to use math functions in dcompute?
Aug 27, 2018
Sobaya
Aug 27, 2018
9il
Aug 27, 2018
Sobaya
Aug 27, 2018
9il
Aug 27, 2018
Nicholas Wilson
Aug 30, 2018
Sobaya
Aug 31, 2018
Nicholas Wilson
Sep 07, 2018
Sobaya
Sep 07, 2018
Nicholas Wilson
Sep 07, 2018
Sobaya
Sep 18, 2018
Sobaya
Sep 18, 2018
Nicholas Wilson
Sep 18, 2018
Nicholas Wilson
Sep 18, 2018
Sobaya
Sep 19, 2018
Nicholas Wilson
Sep 19, 2018
Nicholas Wilson
Sep 20, 2018
Sobaya
Sep 20, 2018
Nicholas Wilson
Sep 20, 2018
Nicholas Wilson
Sep 25, 2018
Sobaya
Feb 24, 2019
naetherm
August 27, 2018
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.
August 27, 2018
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
August 27, 2018
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.
August 27, 2018
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.

Ah, interesting
August 27, 2018
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.
August 30, 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?
August 31, 2018
On Thursday, 30 August 2018 at 10:34:33 UTC, Sobaya wrote:
> 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?

SPIR-V or CUDA?

for SPIR-V try

pragma(mangle, "_Z3sinf")
float sin(float);
pragma(mangle, "_Z3cosf")
float cos(float);

more generally see https://github.com/KhronosGroup/SPIR-Tools/wiki/SPIR-2.0-built-in-functions

If this is a problem with CUDA you could try using the NVPTX intrinsics

pragma(LDC_intrinsic, "llvm.nvvm.namegoeshere")
T namegoeshere(Args a);

If you need to use both SPIR-V and CUDA then see the hackery e.g. https://github.com/libmir/dcompute/blob/master/source/dcompute/std/index.d#L45

LLVM will be released on September 5th I will fix up this shortly after.

Sorry for the alpha state of things right now.

Nic
September 07, 2018
On Friday, 31 August 2018 at 13:30:10 UTC, Nicholas Wilson wrote:
> On Thursday, 30 August 2018 at 10:34:33 UTC, Sobaya wrote:
>> 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?
>
> SPIR-V or CUDA?
>
> for SPIR-V try
>
> pragma(mangle, "_Z3sinf")
> float sin(float);
> pragma(mangle, "_Z3cosf")
> float cos(float);
>
> more generally see https://github.com/KhronosGroup/SPIR-Tools/wiki/SPIR-2.0-built-in-functions
>
> If this is a problem with CUDA you could try using the NVPTX intrinsics
>
> pragma(LDC_intrinsic, "llvm.nvvm.namegoeshere")
> T namegoeshere(Args a);
>
> If you need to use both SPIR-V and CUDA then see the hackery e.g. https://github.com/libmir/dcompute/blob/master/source/dcompute/std/index.d#L45
>
> LLVM will be released on September 5th I will fix up this shortly after.
>
> Sorry for the alpha state of things right now.
>
> Nic

Sorry for being late for reply.

I'm using CUDA for back-end.

So you mean if required function is "cos",

pragma(LDC_intrinsic, "llvm.nvv.cos")
T cos(T a);

Is it right?

I tried this declaration, but I got an error diffrent from previous one:

dcompute.driver.error.DComputeDriverException@../../.dub/packages/dcompute-master/dcompute/source/dcompute/driver/error.d(172): cast(Status)218
----------------
??:? [0x48739e]
??:? [0x48f8aa]
??:? [0x47942d]
error.d:172 [0x42fe61]
error.d:167 [0x42fdb4]
error.d:187 [0x42feca]
program.d:30 [0x42fc00]
app.d:13 [0x417bea]
??:? [0x47908f]
??:? [0x478f85]
__entrypoint.d:8 [0x4289f4]
??:? __libc_start_main [0x2b85f455282f]
??:? [0x405c08]
Program exited with code 1

My declaration is wrong?

Or fixed LLVM(LDC?) is already released?

How can I use it ?
September 07, 2018
On Friday, 7 September 2018 at 06:45:32 UTC, Sobaya wrote:
> Sorry for being late for reply.
>
> I'm using CUDA for back-end.
>
> So you mean if required function is "cos",
>
> pragma(LDC_intrinsic, "llvm.nvv.cos")
> T cos(T a);
>
> Is it right?
>

You're missing an "m" in "nvvm", dunno if that will fix it.

> I tried this declaration, but I got an error diffrent from previous one:
>
> dcompute.driver.error.DComputeDriverException@../../.dub/packages/dcompute-master/dcompute/source/dcompute/driver/error.d(172): cast(Status)218
> ----------------
> ??:? [0x48739e]
> ??:? [0x48f8aa]
> ??:? [0x47942d]
> error.d:172 [0x42fe61]
> error.d:167 [0x42fdb4]
> error.d:187 [0x42feca]
> program.d:30 [0x42fc00]
> app.d:13 [0x417bea]
> ??:? [0x47908f]
> ??:? [0x478f85]
> __entrypoint.d:8 [0x4289f4]
> ??:? __libc_start_main [0x2b85f455282f]
> ??:? [0x405c08]
> Program exited with code 1
>
> My declaration is wrong?
>
> Or fixed LLVM(LDC?) is already released?
>
> How can I use it ?

I'll be adding these to DCompute soon (probably Sunday), LLVM7.0 has just been released and I've been waiting on that to do testing.
September 07, 2018
On Friday, 7 September 2018 at 10:17:47 UTC, Nicholas Wilson wrote:
> On Friday, 7 September 2018 at 06:45:32 UTC, Sobaya wrote:
>>[...]
>
> You're missing an "m" in "nvvm", dunno if that will fix it.
>
>> [...]
>
> I'll be adding these to DCompute soon (probably Sunday), LLVM7.0 has just been released and I've been waiting on that to do testing.

I understand about the release.

But missing "m" is just my typo here. I wrote "llvm.nvvm.cos" correctly on my code, and error occurred.
« First   ‹ Prev
1 2 3