0
我試圖測量一個程序在其同步部件中花了多少時間,例如由鎖(或任何其他形式的併發控制)保護的關鍵部分。如何在我的LLVM傳遞中檢測程序中的線程同步?
我很困惑如何做到這一點,以及如何檢測我通過我的llvm傳遞的程序中的併發控制方法。
我試圖測量一個程序在其同步部件中花了多少時間,例如由鎖(或任何其他形式的併發控制)保護的關鍵部分。如何在我的LLVM傳遞中檢測程序中的線程同步?
我很困惑如何做到這一點,以及如何檢測我通過我的llvm傳遞的程序中的併發控制方法。
我寫了一個tool,Contech,儀器LLVM IR收集同步信息(以及其他數據)。還有一個工具Harmony,它用LLVM IR來測量類似的信息。
我將回顧一下您需要編寫自己的LLVM Pass所需的三個組件。首先,雖然大多數同步控制依賴於原子操作,但這些操作在彙編中並且經常位於其他庫中。由於您沒有跟蹤每條彙編指令的執行情況,因此您需要回退功能的名稱,例如pthread_mutex_lock
或sem_wait
。其次,已經識別出同步控制操作,LLVM通道將需要插入必要的儀器以記錄關於該同步操作的重要信息,例如其標識符(即地址)和時間戳。
第三,系統將需要額外的代碼來處理同步記錄,因爲來自第二組件的儀器位於臨界區內。如果沒有這個組件,結果將會受到儀器的影響。儀器仍會有影響。