QUICK REVIEW
[论文解读] OCCA: A unified approach to multi-threading languages
David Medina, St-Cyr, Amik|arXiv (Cornell University)|Mar 4, 2014
Parallel Computing and Optimization Techniques参考文献 34被引用 84
一句话总结
OCCA 是一个 C++ 库,通过运行时编译和宏扩展,将 OpenMP、OpenCL 和 CUDA 统一为单一内核语言,实现可移植的高性能并行计算。它允许开发者编写可移植的内核,可编译为多种目标线程语言,在 CPU、GPU 和英特尔至强融核等多样化架构上实现高性能。
ABSTRACT
The inability to predict lasting languages and architectures led us to develop OCCA, a C++ library focused on host-device interaction. Using run-time compilation and macro expansions, the result is a novel single kernel language that expands to multiple threading languages. Currently, OCCA supports device kernel expansions for the OpenMP, OpenCL, and CUDA platforms. Computational results using finite difference, spectral element and discontinuous Galerkin methods show OCCA delivers portable high performance in different architectures and platforms.
研究动机与目标
- 解决异构并行计算中架构和语言碎片化的问题。
- 通过在 NVIDIA GPU、AMD GPU 和英特尔至强融核等多类加速器上实现可移植代码,消除厂商锁定。
- 提供统一的编程模型,抽象底层线程差异,同时保持高性能。
- 通过可移植内核生成,支持有限差分、谱元法和间断伽辽金法等高性能数值方法。
提出的方法
- OCCA 使用运行时编译和 C++ 宏扩展,从单一源内核生成平台特定的内核。
- 它引入一种统一的内核语言,其关键字映射到 OpenMP、OpenCL 和 CUDA 中的等效结构。
- 该库提供了与平台无关的线程和块索引、内存属性以及同步原语的抽象。
- 通过平台特定的宏扩展,支持在 CPU、GPU 和至强融核上进行内核编译和执行。
- OCCA 包含用于共享、全局、常量和私有内存的关键字,以及屏障和内存栅障。
- 通过一致的接口实现对不同线程模型的自动代码生成,降低移植工作量。
实验结果
研究问题
- RQ1如何将单一内核语言统一于 OpenMP、OpenCL 和 CUDA 等多种并行编程模型?
- RQ2哪些机制能够实现在 CPU、GPU 和至强融核等多样化硬件架构上高性能、可移植的代码生成?
- RQ3基于宏的运行时编译在多大程度上可减少对多种并行后端支持的维护负担?
- RQ4与手写优化的 CUDA 或 OpenCL 内核相比,OCCA 抽象层在性能保持方面表现如何?
- RQ5OCCA 是否能有效支持在异构平台上实现复杂的数值方法,如间断伽辽金法和谱元法?
主要发现
- OCCA 可成功生成可移植的内核,可编译为 OpenMP、OpenCL 和 CUDA,实现跨架构部署。
- 该库在多个平台上对有限差分法、谱元法和间断伽辽金法均实现了高性能。
- 运行时编译和宏扩展使得单个内核源代码可针对多种线程后端,而无需代码重复。
- 通过映射到 OpenMP、OpenCL 和 CUDA 中原生结构的 OCCA 关键字,支持平台特定的优化。
- 使用统一的关键字进行线程索引、内存属性和同步操作,显著降低了移植复杂性。
- OCCA 通过抽象底层线程差异,同时保持对内存和执行的底层控制,实现了高性能可移植的科学计算。
更好的研究,从现在开始
从论文设计到论文写作,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。