昨天合并到LLVM 18 Git是对OpenMP内核语言的最初支持,这是围绕着拥有性能可移植的GPU代码作为专有CUDA等的替代方案所做的努力。
这项工作是石溪大学和劳伦斯利弗莫尔国家实验室(LLNL)的研究人员对LLVM OpenMP的一组扩展。查看他们的
2023年研究论文
而这个OpenMP内核语言工作的摘要可以归结为:
“在这项工作中,我们引入了LLVM OpenMP的扩展,将其转化为GPU编程的通用且性能可移植的内核语言。这些扩展允许程序从内核语言无缝移植到高性能OpenMP GPU程序,只需最少的修改。为了评估我们的扩展,我们实现了一个概念验证原型,该原型包含我们提出的紧张局势。我们移植了六个已建立的CUDA代理和基准应用程序,并评估了它们在AMD和NVIDIA平台上的性能。通过与本机版本(HIP和CUDA)的比较,我们的结果表明,通过我们的扩展,OpenMP不仅可以匹配,而且在某些情况下超过内核语言的性能,从而以最小的工作量提供性能可移植性
应用程序开发人员。“
已合并
昨天到LLVM的Git只是对这种OpenMP内核语言的最初支持:
“此补丁启动了对OpenMP内核语言的支持,基本上是以SIMT风格编写OpenMP目标区域,类似于CUDA等内核语言。第一个补丁中包含的是目标团队指令的ompx_bare子句。当ompx_bare存在时,将禁用全球化,这样局部变量就不会全球化。运行时init/deinit函数调用将不会发出也就是说,几乎所有的OpenMP可执行指令在该区域中都不受支持,例如并行、任务。这个补丁不包括Sema检查,所以它们的使用是UB。可以使用简单的指令,例如原子指令。我们提供了一组API(对于C,它们以ompx_为前缀;对于C++,它们在ompx命名空间中)来获取线程id、块id等。”
Ultimately the hope is these extensions will ease the transition from kernel languages like CUDA to OpenMP in a portable and cross-vendor manner. As outlined in the aforelinked research paper, the early proof-of-concept performance results have been very promising compared to NVIDIA CUDA and AMD HIP. It will be very interesting to see how this OpenMP kernel language work progresses with mainline LLVM.