Paralel hata ayıklama
Parallel debugging
Yazar: SİNAN KUL
Danışman: YRD. DOÇ. DR. DENİZ DAL
Atatürk Üniversitesi / Fen Bilimleri Enstitüsü / Bilgisayar Mühendisliği Ana Bilim Dalı
Derece: Yüksek Lisans, 2014
Konu: Bilgisayar Mühendisliği Bilimleri-Bilgisayar ve Kontrol = Computer Engineering and Computer Science and Control
Dizin: Hata ayıklayıcı = Debugger

Özet:
Çalışan ama yanlış (beklenmeyen) sonuçlar üreten bir bilgisayar yazılımının içerdiği mantıksal problemlerin (hata) tespit edilmesi ve düzeltilmesi süreci hata ayıklama olarak tanımlanır. Bir programdaki hataların ayıklanması çoğunlukla mevcut programın yazılmasından daha zor ve daha karmaşık bir işlemdir. Yakın bir gelecekte sıklıkla karşılacağımız paralel programlar söz konusu olduğunda bu işlemin zorluğu bir kat daha artmaktadır; çünkü paralel programlar iletişim ve senkronizasyon problemlerini de beraberinde getirmektedir. Geleneksel (seri) programlamada olmayan bu problemler programlamayı olduğundan karmaşık yapmaktadır; bu ise hataların sayısını ve çeşitliliğini artırmaktadır. Ayrıca paralel programların deterministik olmayan yapıları hataların tekrarlanabilirliğini zorlaştırmaktadır. Paralel bir program adım adım çalıştırılamadığı için de geleneksel hata ayıklama teknikleri bu tür programlara uygulanamamaktadır. Yukarıda sıralanan zorluklarla motive olan bu tez ile paralel programlardaki hataların ayıklanmasını kolaylaştıracak yeni bir tekniğin geliştirilmesi hedeflenmiştir.
Bu tez kapsamında öncelikle MPI kütüphanesi kullanılarak C++ dilinde yazılmış olan dağıtık bellekli paralel bir program statik olarak analiz edilmektedir ve paralel yazım kurallarına uymayan durumlar tespit edilmeye çalışılmaktadır. Daha sonra söz konusu paralel program işlemci numaralarından arındırılarak tek bir bilgisayar üzerinde çalışacak seri bir forma dönüştürülmektedir. Bu sayede her bir işlemcinin çalıştırdığı kod satırlarının tespiti, değişken değerlerinin izlenmesi ve gönderilen-alınan mesajların takibi mümkün olmaktadır. Yapılan testler önerilen tekniğin genel anlamda senkronizasyon problemlerinin ve ölümcül kilitlenmelerin tespit edilmesinde başarılı olduğunu kanıtlamıştır.

Anahtar Kelimeler: Hata ayıklama, paralel hata ayıklama, paralel programlama, 
dağıtık bellek, MPI, ölümcül kilitlenme, senkronizasyon.

Abstract:
The process of detection and correction of logical errors (bugs) that a computer software, that works but produces wrong (unexpected) results, contains is defined as debugging. Debugging a program is more difficult and more complicated than writing it in the first place. This process will be more challenging as far as the parallel programs that we will often encounter in the near future are concerned since they bring the communication and the synchronization problems along the way. These problems increase the number and the diversity of the bugs. In addition, the non-deterministic structures of the parallel programs make the reproducibility of the bugs difficult. Since a parallel program can not be run in a step by step fashion, traditional debugging techniques also can not be applied to such programs. Motivated by the challenges listed above, this thesis aims to develop a new technique that facilitates the parallel debugging.
Within the scope of this thesis, a distributed memory parallel program written in C++ using the MPI library is firstly statically analyzed and the cases that do not comply with the parallel programming rules are tried to be determined. Later, the parallel program is converted into a serial form where it can run on a single computer by removing the rank specific statements off the program. In this way, the detection of the code lines each processes runs, monitoring the variables and tracking of sent-received messages become possible. The tests performed have proved the effectiveness of the proposed technique in general on the synchronization problems and the deadlocks.

Keywords: Debugging, parallel debugging, parallel programming, distributed memory, 
MPI, deadlock, synchronization.