Skip to content

[Question] Intel igpu offloading plan regarding openMP support on GCC and LLVM ? #62

Closed
@LifeIsStrange

Description

@LifeIsStrange

My question is not directly related to openCL.
But as a consumer I would like to say that I think GPGPU is coming slowly to a new era.
GPGPU has been possible on various accelerators sinces a decade, yet it has gotten quite a niche usage despite being extremely useful.
This is because reasons such as:
1* The needs to learn a new langage such as openCL/CUDA where most of the market will have a separate cpu code on c++. SYCL help to bridge this gap but still require the needs to systematically adapt existing cpu code.
2* The perceived learning curve, and the real one, and even after mastering them, the inherent productivity loss of having need of kernel boilerplate and to fit to a constrained hardware model.
3* The lack of teaching in universities, or the teaching of Nvidia vendor lockin through proprietary CUDA
4* The lack of heterogeneous computing capabilities that led to yet another api HSA that has currently no suffisant traction in x86 world. the lack of ability to e.g run a loop in multithread, AND on SIMD AND on GPU. As I understund today, SYCL does not allow simultaneous SIMD (AVX) and GPU. I am not aware if it allow simultaneous multithread and GPU offloading on the same loop.

The new era I see is the new thing in town that answer all of thoses real world issues:
openMP 4.5
openMP 4.5 regarding issue 1 and 2*:
One still needs to learn openMP and it has some advanced features that imply a cognitive load.
BUT openMP is made of annotations, that is you can INCREMENTALLY multithread/SIMDIFY/offload parts of codes, WITHOUT changing the code (in most cases) by adding clear explicit annotations.
OpenMP is far higher level, eliminate entire classes of errors, automate things for the developper, is easier and one order of magnitude quicker to learn.

regarding issue 3* openMP is widely used / teached in HPC world, and is extremely vendor, even langage agnostic (supported on Fortran by example).

Regarding issue 4* openMP is the only way that i'm aware of to run code simultaneously in SIMD(avx), cores and an accelerator. Enabling unprecedented performance gain. And openMP is according many benchmarks the most optimised multithread AND SIMD implementation.
It is evolving (5.0) and OpenACC is being merged into openMP !

That being said, let's be clear, openMP offloading does NOT replace SYCL as SYCL can allow better performance on fine grained cases. But because of all said reasons it will play a massive role in HPC/GPGPU computing.
Intel does not yet support openMP offloading to intel iGPUs, while Nvidia NVPTX is well supported on Clang and GCC, and AMD GCN offloading is ready for GCC 10. This is making intel far less competitive.
Yet Intel is really making a push for GPU computing, and has the ressources.

This is why I ask Intel to consider OpenMP intel i/D/GPU/FPGA offloading support in llvm and GCC as a priority.
And allowing better openMP/SYCL interoperability, and investing ressources in improving openMP (e.g clang omp declare simd: does not yet enable the vectorizer passe which is big low hanging fruit) instead of reinventing the wheel with yet another competing standard () that seems to be intel oneAPI.
https://www.phoronix.com/scan.php?page=news_item&px=Intel-oneAPI-Announcement
Another big improvment that could be brought by openMP would be to allow it run easily on clusters in a standardised way.
currently HPC users mixes openMP and MPI but this is suboptimal, intel already has developped cluster openMP https://software.intel.com/sites/default/files/1b/1f/6330 but integrated in the standard for openMP next and adding support for it in other compilers than ICC would be a nice improvment !
I wonder if there could also be a map reduce extension.
Edit: There's one! But not well tested: https://ompcloud.github.io/

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions