Gcc 在omp_fn例程中测量时间

Gcc 在omp_fn例程中测量时间,gcc,openmp,disassembly,intel-pin,Gcc,Openmp,Disassembly,Intel Pin,我正在编写一个pintool,用于收集应用程序例程子集中的指标(其中一些是由编译器生成的)。 目标是获得这些例程的执行时间 下面是我已经做过的一系列尝试: 当然,由于虚拟机的开销,使用pin是一个坏主意 gcc选项-FinInstrument函数不适用于它生成的OpenMP函数 LD_预加载不适用于静态链接的OpenMP函数 也许如果允许pin转储静态检测的程序集,我们可以避免虚拟环境开销,但据我所知,这是不可能的 我知道Maqao instrumentation tool不使用虚拟环境,但我

我正在编写一个pintool,用于收集应用程序例程子集中的指标(其中一些是由编译器生成的)。 目标是获得这些例程的执行时间

下面是我已经做过的一系列尝试:

  • 当然,由于虚拟机的开销,使用pin是一个坏主意
  • gcc选项-FinInstrument函数不适用于它生成的OpenMP函数
  • LD_预加载不适用于静态链接的OpenMP函数
  • 也许如果允许pin转储静态检测的程序集,我们可以避免虚拟环境开销,但据我所知,这是不可能的
  • 我知道Maqao instrumentation tool不使用虚拟环境,但我希望避免使用太多框架或将pintool翻译成Maqao lua脚本

我想我只剩下手动二进制指令插入了,但如果有人有更好的解决方案,我们将非常感谢您的帮助。

如果您只是想要结果,请使用支持OpenMP的全面测量基础架构,如Intel VTune、Extrae/Paraver。这将为您提供有关OpenMP区域的分析或跟踪信息


如果您想自己实现度量,可以使用底层的源到源转换工具。您也可以使用更干净的,但AFAIK尚未得到广泛支持。最近的“英特尔OpenMP”运行时可能会给您带来一些运气。

如果您只想得到结果,请使用支持OpenMP的全面测量基础架构,如英特尔VTune、Extrae/Paraver、。这将为您提供有关OpenMP区域的分析或跟踪信息


如果您想自己实现度量,可以使用底层的源到源转换工具。您也可以使用更干净的,但AFAIK尚未得到广泛支持。最近的英特尔OpenMP运行时可能会给您带来一些运气。

我同意使用OMPT。这是最好的方法之一。有多个其他检测库支持此功能。例如:英特尔VTune、Extrae/Paraver等。Linux性能也非常有用,尽管很难消除每个不同线程的指标。添加了VTune/Extrae。perf通常是一个很棒的工具,但它没有OpenMP的概念,也不擅长区分线程。此外,采样方法在计时方面的准确性有限。OMPT似乎是避免额外框架的最佳解决方案。让我试试看,我会给你我的反馈。这个界面似乎还没有实现。是吗?Zulan所指的LLVM运行时基本上与GCC编译代码兼容(可能有一些与最近实现的任务操作相关的缺少入口点,但“经典”OpenMP代码应该可以)。我同意使用OMPT。这是最好的方法之一。有多个其他检测库支持此功能。例如:英特尔VTune、Extrae/Paraver等。Linux性能也非常有用,尽管很难消除每个不同线程的指标。添加了VTune/Extrae。perf通常是一个很棒的工具,但它没有OpenMP的概念,也不擅长区分线程。此外,采样方法在计时方面的准确性有限。OMPT似乎是避免额外框架的最佳解决方案。让我试试看,我会给你我的反馈。这个界面似乎还没有实现。是吗?Zulan所指的LLVM运行时基本上与GCC编译代码兼容(可能有一些与最近实现的任务操作相关的缺少入口点,但“经典”OpenMP代码应该可以)。