Scientific computing and parallel computing C++23/C++26

Nicholas Wilson iamthewilsonator at hotmail.com
Thu Jan 20 00:43:30 UTC 2022


On Wednesday, 19 January 2022 at 10:17:45 UTC, Ola Fosheim 
Grøstad wrote:
> On Wednesday, 19 January 2022 at 09:49:59 UTC, Nicholas Wilson 
> wrote:
>> Arguably that already describes Nvidia. Luckily for us, it has 
>> an intermediate layer in PTX that LLVM can target, and that's 
>> exactly what dcompute does.
>
> For desktop applications one has to support Intel, AMD, Nvidia, 
> Apple. So, does that mean that one have to support Metal, 
> Vulkan, PTX and RocM? Sounds like too much…

That was a comment mostly about the market share and "business 
practices" Nvidia.

Intel is well supported by OpenCL/SPIR-V.

There are some murmurings that AMD is getting SPIR-V support for 
ROCm, though if that is insufficient, I don't think it would be 
too difficult to hook the AMDGPU backend to LDC+DCompute (runtime 
libraries would be a bit tedious, given the lack of familiarity 
and volume of code), but I have no hardware to run ROCm math the 
moment.

Metal should also not be too difficult (the kernel argument 
format is different which is annoying) to hook LDC up to, the 
main thing lacking is Objective-C support to bind the runtime 
libraries for DCompute (which would also need to be written.

LDC can already target Vulkan compute (although the pipeline is 
tedious, and there is no runtime library support).

>> Unlike C++, D can much more easily statically condition on 
>> aspects of the hardware, making the tuning process faster to 
>> navigate the parameter configuration space.
>
> Not sure what you meant here?

I mean there are parametric attributes of the hardware, say for 
example cache size (or available registers for GPUs), that have a 
direct effect on how many times you can unroll the inner loop, 
say for a windowing function, and you want to ship optimised  
code for multiple configurations of hardware.

You can much more easily create multiple copies for different 
sized cache (or register availability) in D than you can in C++, 
because static foreach and static if >>> if constexpr.


More information about the Digitalmars-d mailing list