gcc 是否可以跟踪OpenMP源代码?

ckocjqey  于 2023-01-26  发布在  其他
关注(0)|答案(1)|浏览(194)

我希望深入了解OpenMP及其内部机制、数据结构和操作系统级别的算法(例如,我假设对于任务关联性,每个位置都有自己的任务队列,并且在不绑定任务的情况下,在运行队列之间存在任务迁移/窃取。是否有一个描述所有这些内容的技术论文数据库,以及一个描述gcc源代码树中哪些文件是感兴趣的指南?
我在gcc源代码树中搜索包含字符串omp的文件名,找到了一些结果,但我不知道这些是否都是相关的文件。

ljsrvy3e

ljsrvy3e1#

我希望深入了解OpenMP及其内部机制、数据结构和操作系统级别的算法
OpenMP是一个标准,而不是一个实现。有多种实现。两种是主流:GOMP与GCC关联,IOMP与Clang(和ICC)关联。
是否有描述所有这些内容的技术论文数据库,以及描述GCC源代码树中哪些文件值得关注的指南?
AFAIK,不适用于GOMP。该代码是此代码以及associated documentation(更具体地说是this页面)的参考。该代码会随着时间的推移而修改,因此文档会很快过时(特别是因为OpenMP规范的版本发布相对频繁,有时会导致目标实现中的深层更改)。
请注意,有一些在线生成的文档,如this one,但看起来它现在真的过时了。
我在gcc源代码树中搜索包含字符串omp的文件名,找到了一些结果,但我不知道这些是否都是相关的文件。
一般来说,OpenMP实现分为两部分编写,一部分在编译器中,用于解析编译指示,然后将其转换为运行时调用(例如,并行部分),或调整编译器行为(例如SIMD指令)。这是一种前端。另一部分是运行时,它是实现的热点,是一种后端,动态数据结构所在的位置(例如,任务、屏障、并行部分等)。GOMP是以这种方式实现的。也就是说,这两个部分比IOMP等其他实现更紧密地相关(AFAIK,GOMP并不意味着在GCC以外的其他编译器中使用)。
代码可以在here上找到。“loop.c”可能是理解实现的第一个文件。GOMP总体上相对简单。
我假设对于任务关联性,每个位置都有自己的任务队列,并且在未绑定任务的情况下,在运行队列之间存在任务迁移/窃取
任务关联是一个新特性,最近才得到支持(在GCC 12中)。如果它是一个无操作(这在新特性中并不罕见),我不会感到惊讶。事实上,"affinity.c"倾向于证实这一点。至于队列,我上次查看代码时,GOMP使用的是一个中央队列(不可伸缩)。

相关问题