Compile: gcc–g–oexampleexample.c</code></p></li><li><p>StartGDB:<code>gdbexample</code></p></li><li><p>Setbreakpoint:<code>(gdb)breakmain</code></p></li><li><p>Run:<code>(gdb)run</code></p></li><li><p>Step:<code>(gdb)next</code>or<code>(gdb)step</code></p></li><li><p>Printvariable:<code>(gdb)printa</code>,<code>(gdb)printsum</code></p></li><li><p>Continue:<code>(gdb)continue</code></p></li><li><p>Quit:<code>(gdb)quit</code></p></li></ul><h4id="a654dcae−128e−448d−8759−fe6bbe4a1669"data−toc−id="a654dcae−128e−448d−8759−fe6bbe4a1669"collapsed="false"seolevelmigrated="true">DebuggingonHPC</h4><ul><li><p>Requiresdetailedviewofsupercomputersoftwareandhardware.</p></li><li><p>Invokedviacommand:<code>gdb<executablename></code>.</p></li><li><p><code>−g</code>flagduringcompilationisimportant.</p></li></ul><h4id="4d6e69c1−d67c−4421−a817−aceb83d54763"data−toc−id="4d6e69c1−d67c−4421−a817−aceb83d54763"collapsed="false"seolevelmigrated="true">BreakPoints(GDB)</h4><ul><li><p>Interruptscodeexecutiontoexamineprogramstate.</p></li><li><p>Setusingfunctionname,linenumber,filename,orcondition.</p></li><li><p>Examples(usingcodefromFig.14.2):</p><ul><li><p><code>breakprintf</code></p></li><li><p><code>break17</code></p></li><li><p><code>breakdotprodserial.c:17</code></p></li><li><p><code>breakdotprodserial.c:16ifi==4</code></p></li></ul></li><li><p><code>infobreakpoints</code>:Queriesbreakpointinformation.</p></li><li><p>Disable:<code>disable<breakpointid></code>;enable:<code>enable<breakpointid></code>;delete:<code>delete<breakpointid></code>;temporarybreakpoint:<code>tbreak<location></code>.</p></li></ul><h4id="8df3b644−7a20−48ed−9af6−77b1f947dc92"data−toc−id="8df3b644−7a20−48ed−9af6−77b1f947dc92"collapsed="false"seolevelmigrated="true">WatchPointsandCatchPoints</h4><ul><li><p>Conditionalbreakpointsbasedonvariablewritesorevents.</p></li><li><p><code>watch<expression></code>:Watchesforchangestoavariable.</p><ul><li><p>Example:TowatchforchangestothevalueofthesumvariableinFig.14.2,thecommandwatchsumwouldbeissuedtothegdbcommandlineoncethevariablesumwasinthecurrentcontextatline20</p></li></ul></li><li><p><code>infowatchpoints</code>:Commandtogettheinformationonwatchpoints.</p></li></ul><h4id="2df8a813−0efb−4fc1−9fd7−adcfa55c75cf"data−toc−id="2df8a813−0efb−4fc1−9fd7−adcfa55c75cf"collapsed="false"seolevelmigrated="true">BackTrace</h4><ul><li><p>Showsthecallstackwhenexecutionpauses.</p></li><li><p>Use<code>backtrace</code>(or<code>bt</code>)command.</p></li><li><p>Use<code>up</code>and<code>down</code>totraversethecallstack.</p></li></ul><h4id="7f41ac8a−a1bd−41b3−85d0−de34a94f83af"data−toc−id="7f41ac8a−a1bd−41b3−85d0−de34a94f83af"collapsed="false"seolevelmigrated="true">SettingaVariable(GDB)</h4><ul><li><p>Modifyvariablevaluesduringexecutiontotestscenarios.</p></li><li><p>Usethe<code>set</code>command:<code>setvariablevarname=newvalue</code>(e.g.,<code>setvariablex=10</code>).</p></li></ul><h4id="bf9b7a69−cbe9−4bda−a199−e469ad044f82"data−toc−id="bf9b7a69−cbe9−4bda−a199−e469ad044f82"collapsed="false"seolevelmigrated="true">Threads(GDB)</h4><ul><li><p>Formultithreadedapplications(e.g.,OpenMP).</p></li><li><p><code>infothreads</code>:ListsthreadsandIDs.</p></li><li><p><code>thread<thread−id></code>:Switchesbetweenthreads.</p></li></ul><h4id="2581b4ce−5073−432b−8cbf−61323eef8a2c"data−toc−id="2581b4ce−5073−432b−8cbf−61323eef8a2c"collapsed="false"seolevelmigrated="true">Valgrind</h4><ul><li><p>Toolsuitefordebugging,especiallymemoryerrorsandthreaddataraces.</p></li><li><p>Compilewith<code>−g</code>flag.</p></li><li><p>Usage:<code>valgrind–tool=helgrind<programexecutable></code>(fordataracedetection).</p></li><li><p>Ifnotoolspecified,runsMemcheck(memoryerroridentification).</p></li><li><p>Seetable14.2forGDBcommandsummaries.</p></li></ul><h4id="fa1b29d5−7d64−450f−b9a9−e8a8da23900c"data−toc−id="fa1b29d5−7d64−450f−b9a9−e8a8da23900c"collapsed="false"seolevelmigrated="true">DebuggingParallelBugs</h4><ul><li><p>Parallelprogramscanhave"parallel−only"bugs.</p><ul><li><p>RaceConditions</p><ul><li><p>Arearesultfrommisuseofsharedvariables</p></li></ul></li><li><p>DeadLocks</p><ul><li><p>Whentasksareperpetuallywaitingforamessageorsignalthatneverarrives.</p></li></ul></li></ul></li></ul><h4id="fecc9641−92f4−4105−be96−176b4508856a"data−toc−id="fecc9641−92f4−4105−be96−176b4508856a"collapsed="false"seolevelmigrated="true">RaceConditions</h4><ul><li><p>Occurduetomisuseofsharedvariableswithoutproperprotection.</p></li><li><p>Mitigation:</p><ul><li><p>Use<code>default(none)</code>inOpenMPpragmas.</p></li><li><p>Testcodewithout<code>nowait</code>clauses.</p></li></ul></li><li><p>Manifestaswrongandvariablecoderesults.</p></li><li><p>Debugging:focusonsharedvariables.</p></li></ul><h4id="64f7e6b7−674a−4218−95be−edaef10d4c34"data−toc−id="64f7e6b7−674a−4218−95be−edaef10d4c34"collapsed="false"seolevelmigrated="true">Deadlocks</h4><ul><li><p>Threadslockupwaitingonresourcesthatneverbecomeavailable.</p></li><li><p>Sign:programhangs.</p></li><li><p>Prevention:</p><ul><li><p>BecarefulwiththreadIDconditionalclauses.</p></li><li><p>Use<code>flush</code>pragmaforthreadcommunication.</p></li><li><p>Unsetlocksaftersettingthem.</p></li></ul></li></ul><h4id="583db1b3−2993−405d−a9a6−432324d8844c"data−toc−id="583db1b3−2993−405d−a9a6−432324d8844c"collapsed="false"seolevelmigrated="true">ToolsforParallelDebugging</h4><ul><li><p>Useproperdebuggingandprofilingtools.</p></li><li><p>SHARCNETtools:</p><ul><li><p>DDT:commercialdebugger(MPI,OpenMP,CUDA).</p></li><li><p>VALGRIND:open−sourcememorydebugger.</p></li></ul></li></ul><h4id="0b13df0b−28d1−43a7−ad67−e38adb62813d"data−toc−id="0b13df0b−28d1−43a7−ad67−e38adb62813d"collapsed="false"seolevelmigrated="true">DDT(DistributedDebuggingTool)</h4><ul><li><p>CommercialdebuggerwithGUIforparallelprograms(MPI,OpenMP,CUDA).</p></li><li><p>SupportsC,C++,Fortran.</p></li></ul><h4id="f92a6ff6−9f3a−4d61−a918−46e9ab7289c1"data−toc−id="f92a6ff6−9f3a−4d61−a918−46e9ab7289c1"collapsed="false"seolevelmigrated="true">DebuggingOpenMPExample:UnprotectedSharedVariable</h4><ul><li><p>Commonerror:accessingsharedvariablewithoutprotection.</p></li><li><p>UseValgrindtoidentifydataraces.</p></li><li><p>Example:</p><ul><li><p>Preventingraceconditionsisdonethroughsynchronizationmechanismssuchas:</p><ul><li><p>CriticalSection</p></li><li><p>AtomicOperations</p></li><li><p>ReductionClause</p></li><li><p>Locks</p></li></ul></li></ul></li></ul><h4id="3d2658e2−618a−4d4e−88c5−9b9668192bab"data−toc−id="3d2658e2−618a−4d4e−88c5−9b9668192bab"collapsed="false"seolevelmigrated="true">DebuggingMPIExample:Deadlock</h4><ul><li><p>Commonerror:competingrequestsblockprogress.</p></li><li><p>DebugusingGDBforeachprocess.</p></li><li><p>Twoapproaches:</p><ul><li><p>Launchxtermwindowforeachprocess(maynotworkonallclusters).</p></li><li><p>ModifycodetoprintPIDsandpauseexecution.</p></li></ul></li></ul><h4id="068570d5−96ac−4ec4−93c8−dc8ce1da8a3b"data−toc−id="068570d5−96ac−4ec4−93c8−dc8ce1da8a3b"collapsed="false"seolevelmigrated="true">CompilerFlagsforDebugging</h4><ul><li><p>Compilerwarningsassistindebugging.</p></li><li><p>Usecommand−lineoptionstocheckformistakes.</p></li><li><p>Seetable14.5forGNU,Intel,LLVM,andPGIoptions.</p></li></ul><h4id="1dcd3772−399f−42db−bad6−c18c7e8d2e6f"data−toc−id="1dcd3772−399f−42db−bad6−c18c7e8d2e6f"collapsed="false"seolevelmigrated="true">SystemMonitorstoAidDebugging</h4><ul><li><p>Clustersusemonitoringsoftwarefornodehardwarestatusandworkloadinformation.</p></li><li><p>MonitorsCPUutilization,memoryusage,I/O,networktraffic,diskspace.</p></li><li><p>Lightweightdaemonscollectinformationregularly.</p></li><li><p>Commonmonitors:Nagios,Ganglia.</p></li></ul><h4id="dcfe6276−42d4−4d9d−a085−e133a24a5d1e"data−toc−id="dcfe6276−42d4−4d9d−a085−e133a24a5d1e"collapsed="false"seolevelmigrated="true">TypesofErrorsandDebuggingTools</h4><ul><li><p>SyntaxErrors:</p><ul><li><p>CompilerErrorMessages</p></li><li><p>StaticAnalysisTools</p></li></ul></li><li><p>RuntimeErrors:</p><ul><li><p>GDB</p></li><li><p>Valgrind</p></li><li><p>AddressSanitizer</p></li><li><p>CoreDumps</p></li></ul></li><li><p>LogicalErrors:</p><ul><li><p>PrintfDebugging</p></li><li><p>GDB/LLDB</p></li><li><p>UnitTestingFrameworks</p></li></ul></li><li><p>MemoryErrors:</p><ul><li><p>Valgrind</p></li><li><p>AddressSanitizer</p></li><li><p>Heaptrack</p></li></ul></li><li><p>ConcurrencyErrors:</p><ul><li><p>ThreadSanitizer</p></li><li><p>IntelInspector</p></li><li><p>Helgrind</p></li></ul></li><li><p>DistributedSystemErrors</p><ul><li><p>TotalView</p></li><li><p>MPICHECK</p></li><li><p>DTrace/strace</p></li></ul></li><li><p>PerformanceErrors:</p><ul><li><p>Perf</p></li><li><p>Gprof</p></li><li><p>VtuneProfiler</p></li></ul></li></ul><h4id="a0ffbd08−7e82−4700−8a9a−42946f1efe16"data−toc−id="a0ffbd08−7e82−4700−8a9a−42946f1efe16"collapsed="false"seolevelmigrated="true">ProfilingTools</h4><ul><li><p>Linux:Perf,PAPI,Perfctr,Gprof</p></li><li><p>Windows:IntelVTuneProfiler</p></li><li><p>MeasureCPUusage,memoryallocation,functioncallfrequencies,andmore.</p></li><li><p>Identifybottlenecksandoptimizecode.</p></li><li><p>Findhotspots,measurecacheefficiency,analyzebranchmispredictions,andtrackI/Obottlenecks.</p></li></ul><h4id="0c15d4d6−fc2c−4baf−b2dc−2cfe9e607870"data−toc−id="0c15d4d6−fc2c−4baf−b2dc−2cfe9e607870"collapsed="false"seolevelmigrated="true">PerfTool</h4><ul><li><p>ProfilertoolforLinux.</p></li><li><p>Identifieshotspots,measurescacheefficiencyandanalyzesbranchmispredictions</p></li><li><p>TypicaloutputMetrics:thenumberofCPUcycles,thenumberofinstructionsexecuted,cachehitsandmisses</p></li><li><p>BasicCommands:</p><ul><li><p><code>perfstat</code>:Providesasummaryofperformancecounterswhileacommandruns.</p></li><li><p><code>perfrecord</code>:Capturesdetailedperformancedataforlateranalysis.</p></li></ul></li></ul><h4id="80e56254−ff58−4dec−903c−acc866351c0a"data−toc−id="80e56254−ff58−4dec−903c−acc866351c0a"collapsed="false"seolevelmigrated="true">Gnuplot</h4><ul><li><p>Graphingutility,commandlinedriven.</p></li><li><p>Cross−platformfunctionality</p></li><li><p>Generateawiderangeofplots</p></li><li><p>ControlledviaScripts</p></li><li><p>BasicCommandSequence:</p><ul><li><p><code>gnuplot <gnuplot> plot sin(x)