如何在LLVM传递中检测程序中的线程同步?

时间:2017-01-02 14:27:16

标签: concurrency llvm llvm-clang llvm-ir thread-synchronization

我正在尝试衡量一个程序在其同步部分中花费的时间,例如受锁(或任何其他形式的并发控制)保护的关键部分。

我对如何操作以及如何在我通过llvm传递的程序中检测并发控制方法感到困惑。

1 个答案:

答案 0 :(得分:2)

我写了一个tool,Contech,用于检测LLVM IR以收集同步信息(以及其他数据)。还有一个工具Harmony,用于检测LLVM IR以测量类似信息。

我将概述编写自己的LLVM Pass所需的三个组件。

首先,虽然大多数同步控制依赖于原子操作,但这些操作都在汇编中,并且通常位于其他库中。由于您没有跟踪每个汇编指令的执行情况,因此您需要依赖函数的名称,例如pthread_mutex_locksem_wait

其次,在确定了同步控制操作后,LLVM传递将需要插入必要的工具来记录有关此同步操作的重要信息,例如其标识符(即地址)和时间戳。

第三,系统将需要额外的代码来处理同步记录,因为来自第二个组件的检测是在关键部分内。如果没有此组件,结果将由仪器偏斜。仪器仍然会产生影响。