Abstract
Message races should be detected for debugging effectively message-passing programs because they can cause non-deterministic executions of a program. Previous tools for detecting message races report that message races occur in every receive operation which is expected to receive any messages. However message races might not occur in the receive operation if each of messages is transmitted through a different logical communication channel so that their incorrect detection makes it a difficult task for programmers to debug programs. In this paper we suggest a tool, MPIRace-Check, which can exactly detect message races by checking the concurrency between send/receive operations, and by inspecting the logical communication channels of the messages. To detect message races, this tool uses the vector timestamp to check if send and receive operations are concurrent during an execution of a program and it also uses the message envelop to inspect if the logical communication channels of transmitted messages are the same. In our experiment, we show that our tool can exactly detect message races with efficiency using MPI_RTED and a benchmark program. By detecting message races exactly, therefore, our tool enables programmers to develop reliable parallel programs reducing the burden of debugging.
메시지전달 프로그램에서 발생하는 메시지경합은 프로그램의 비결정적 수행결과를 초래하므로 효과적인 디버깅을 위하여 탐지되어야 한다. 메시지경합을 탐지하는 기존의 도구는 임의의 메시지를 수신하는 모든 사건에서 경합이 발생한다고 보고한다. 그러나 메시지들이 전송되는 논리적인 통신채널이 서로 다르면 임의의 메시지를 수신하는 사건에서 경합이 발생하지 않을 수도 있으므로, 기존 도구의 부정확한 탐지정보는 프로그래머의 디버깅 작업을 더욱 어렵게 한다. 본 논문에서는 메시지 송수신 사건간의 병행성과 메시지들의 논리적 통신채널을 검사하여 보다 정확하게 메시지경합을 탐지하는 도구인 MPIRace-Check를 제안하다. 본 도구는 vector timestamp를 이용하여 프로그램 수행 중에 메시지를 전송하는 송수신 사건들간의 병행성을 검사하고, 메시지 부가정보를 이용하여 메시지들의 논리적인 통신채널이 동일한지를 검사하여 메시지경합을 탐지한다. 실험에서는 MPI_RTED와 벤치마크 프로그램을 이용하여 본 도구가 프로그램 수행 중에 효율적으로 모든 경합을 정확하게 탐지함을 보인다. 따라서 본 도구는 메시지경합을 정확하게 탐지하여 프로그래머의 디버깅 부담을 줄이고 신뢰성이 있는 병렬 프로그램의 개발을 가능하게 한다.