지금은 병렬 코드를 실행하지 않지만 향후 OpenMP와 MPI의 하이브리드를 사용하여 병렬 코드를 실행할 것으로 예상합니다. 직렬 프로젝트를 실행할 때 디버거는 귀중한 도구였습니다.
누구나 병렬 소프트웨어 디버깅에 사용할 병렬 디버거 (또는 여러 디버거)를 추천 할 수 있습니까? 자유 소프트웨어가 바람직하지만 효과적인 상용 소프트웨어를 언급하는 것을 망설이지 마십시오.
지금은 병렬 코드를 실행하지 않지만 향후 OpenMP와 MPI의 하이브리드를 사용하여 병렬 코드를 실행할 것으로 예상합니다. 직렬 프로젝트를 실행할 때 디버거는 귀중한 도구였습니다.
누구나 병렬 소프트웨어 디버깅에 사용할 병렬 디버거 (또는 여러 디버거)를 추천 할 수 있습니까? 자유 소프트웨어가 바람직하지만 효과적인 상용 소프트웨어를 언급하는 것을 망설이지 마십시오.
답변:
기본적으로 Allinea의 DDT ( TACC 에서 사용하는 것 )와 Totalview (다른 의견에서 언급 한)의 두 가지 주요 상업적 선택이 있습니다. 그것들은 비슷한 기능을 가지고 있으며 활발히 개발되었으며 직접적인 경쟁자입니다.
Eclipse에는 Parallel Tools Platform이 있으며 여기에는 MPI 및 OpenMP 프로그래밍 지원 및 병렬 디버거가 포함되어야합니다.
나는 curmudgeon에게 대답을해야한다. 위의 제안으로 생산성이 향상되지 않았습니다. 그것들은 내가 선호하는 옵션과 비교하여 느리고 비싸다 : 프로세스 당 하나의 gdb 세션. 각 gdb는 MPI 프로세스에 연결하여 xterm에 배치 할 수 있습니다 (이는 PETSc에서을 사용하여 자동으로 발생 함 -start_in_debugger
). 나는 이것을 15 년 동안 행복하게 사용했습니다. 이의 제기 :
1) 글로벌 데이터를 볼 수 없습니다
MPI는 공유 없음 모델이므로 전역 데이터는없고 로컬 데이터 만 있습니다
2)이 전략은 많은 프로세스로 확장되지 않습니다
버그도 없습니다. 개별 프로세스에서 버그가 발생할 수 있습니다 (1 개 또는 2 개의 이웃에서 입력 한 경우). YOu는 참여 프로세스 ( -debugger_nodes 0,5,17
예 : PETSc)에서만 gdb를 쉽게 생성 할 수 있습니다 . 또한 위의 시스템은 모든 프로세스에서 실행될 때 많은 것을 포기하므로 속도가 느려집니다. 실제로 gdb 방법은 훨씬 확장 성이 뛰어납니다.
gdb는 또한 이식성이 뛰어납니다. 모든 곳에서 실행되며 C ++ 및 Fortran을 이해하며 실행 내에서 임의의 코드를 실행할 수 있습니다. 데이터를 실행할 때 쉽게 데이터를 표시하는 특수 기능을 작성했습니다.
직렬 및 병렬 프로그램에는 두 개의 디버거 만 사용합니다.
(2)가 충분히 확장 가능하지 않은 경우에는 (1b)를 참조하십시오.
이 인텔 패러렐 스튜디오 병렬 디버거를 포함하고 있습니다. 나는 그것을 사용해 본 적이 없지만 몇 가지 데모에서 사용되는 것을 보았습니다. 다음 은 일부 기능을 보여주는 비디오 자습서 입니다.
또한 gdb와 관련하여 특정 경우에 합리적으로 잘 작동하는 몇 가지 래퍼를 보았습니다.
Totalview . 상용 디버거입니다. 각 프로세서에서 스택을 보는 것이 매우 쉽습니다. 프로세서 / 스레드에서 변수 값을보고 변경할 수 있습니다. 변수 값을 시각화하기 위해 벡터 또는 Matracies를 플로팅 할 수 있습니다. 필자가 직접 작업 한 적이 없지만 정교한 감시 점 분석을 위해 스크립팅도 가능하다 (Tk / Tcl).
병렬 코드를 디버깅하는 몇 가지 간단한 방법을 위해 몇 가지 답변을 수집했습니다 .II 디버깅 섹션의 FAQ : https://github.com/dealii/dealii/wiki/Frequently-Asked-Questions#debugging -dealii-applications
다음은 이전에 나에게 주어진 답변의 요약입니다.
OpenMP에는 타이밍 기능이 있습니다 : omp_get_wtime()
및 omp_get_wtick()
- 온라인 문서
구글은 CPU 프로파일 러를 가지고
OpenMP 및 MPI 프로파일 및 분석을 수행하는 Scalasca 가 있습니다
그런 다음 사용하지 않은 Tau 와 vtune 이 있습니다.
행운을 빕니다!