병렬 디버깅에 어떤 소프트웨어를 사용하는 것이 좋습니까?


24

지금은 병렬 코드를 실행하지 않지만 향후 OpenMP와 MPI의 하이브리드를 사용하여 병렬 코드를 실행할 것으로 예상합니다. 직렬 프로젝트를 실행할 때 디버거는 귀중한 도구였습니다.

누구나 병렬 소프트웨어 디버깅에 사용할 병렬 디버거 (또는 여러 디버거)를 추천 할 수 있습니까? 자유 소프트웨어가 바람직하지만 효과적인 상용 소프트웨어를 언급하는 것을 망설이지 마십시오.


여기에 대한 답변이 stackoverflow.com/questions/329259/… 과 어떻게 다른지 알 수 없습니다 . MPI는 OpenMP가 아닌 어려운 부분입니다. 어쨌든, 스레드 프로그램에서 경쟁 조건을 디버깅하는 것은 현재 경계선으로 해결할 수 없습니다.
Jeff

ThreadSanitizer는 스레드 프로그램에서 경쟁 조건을 디버깅하는 데 유용한 솔루션이지만 MPI를 믹스에 추가하려는 사람은 아무도 없습니다!
mabraham

답변:


17

기본적으로 Allinea의 DDT ( TACC 에서 사용하는 것 )와 Totalview (다른 의견에서 언급 한)의 두 가지 주요 상업적 선택이 있습니다. 그것들은 비슷한 기능을 가지고 있으며 활발히 개발되었으며 직접적인 경쟁자입니다.

Eclipse에는 Parallel Tools Platform이 있으며 여기에는 MPI 및 OpenMP 프로그래밍 지원 및 병렬 디버거가 포함되어야합니다.


PTP 병렬 디버거를 사용하는 사람에 대해 들어 본 적이 없습니다. 그게 무슨 뜻인지 잘 모르겠습니다.
Jeff

시도한 동료가 몇 명 있지만 직접 연주 한 적이 없습니다.
Bill Barth

16

나는 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을 이해하며 실행 내에서 임의의 코드를 실행할 수 있습니다. 데이터를 실행할 때 쉽게 데이터를 표시하는 특수 기능을 작성했습니다.


4
겁쟁이, 만약 당신이 downvote라면, 의견을 남겨주세요.
Matt Knepley

5
나는 투표권이 아니었지만 어느 정도 동의하지 않습니다. 작은 크기로 표시되지 않는 몇 가지 버그가 발생했으며 병렬 디버거를 사용하는 것이 효율적인 방법이었습니다. printf로 디버깅하고 gdb로 개별 프로세스에 연결하는 대부분의 디버깅을 수행하지만 병렬 디버거가 있다는 이점을 보았습니다.
Bill Barth

3
내가 규모의 버그를 만난 유일한 시간은 부적절한 집단 통신 알고리즘이 선택되어 성능 버그였습니다. 다시 한 번, 내가 사용하는 디버거에 가장 가까운 것은 valgrind이므로 내 견해는 Matt의 것보다 훨씬 극단적입니다.
Jack Poulson

1
@BillBarth 나는 작은 문제에 나타나지 않는 1000 개의 프로세스에 버그가 있다는 것이 옳다는 것을 알고 있습니다 (Dinesh는 유명한 PETSc를 가지고 있었으며 82 개월 동안 만 나타났습니다). 나의 요점은 일반적인 지혜에 반하는 것이었다. 병렬 디버거는 최후의 수단이 아니라 좋은 최후의 수단이라고 생각합니다.
Matt Knepley

3
나는 당신을 downvoted. 당신의 대답은 요청 된 것이 아닙니다.
aterrel

5

직렬 및 병렬 프로그램에는 두 개의 디버거 만 사용합니다.

  1. Kernighan 디버거, 즉 신중한 인쇄 진술과 신중한 사고.
  2. http://www.open-mpi.org/faq/?category=debugging#serial-debuggers에 설명 된 여러 GDB 인스턴스 .

(2)가 충분히 확장 가능하지 않은 경우에는 (1b)를 참조하십시오.


1
"Kernighan 디버거"라는 이름은 들어 본 적이 없지만 항상 디버깅하는 방식이므로 승인합니다.
잭 폴슨

4

인텔 패러렐 스튜디오 병렬 디버거를 포함하고 있습니다. 나는 그것을 사용해 본 적이 없지만 몇 가지 데모에서 사용되는 것을 보았습니다. 다음 은 일부 기능을 보여주는 비디오 자습서 입니다.

또한 gdb와 관련하여 특정 경우에 합리적으로 잘 작동하는 몇 가지 래퍼를 보았습니다.


3

Totalview . 상용 디버거입니다. 각 프로세서에서 스택을 보는 것이 매우 쉽습니다. 프로세서 / 스레드에서 변수 값을보고 변경할 수 있습니다. 변수 값을 시각화하기 위해 벡터 또는 Matracies를 플로팅 할 수 있습니다. 필자가 직접 작업 한 적이 없지만 정교한 감시 점 분석을 위해 스크립팅도 가능하다 (Tk / Tcl).


주관적인 측면에서, 우리 대학의 HPC 센터가 이것을 설치할 때 나는 그것이 과도하다고 생각했습니다. 그런 다음 매우 복잡한 디버깅을 수행하는 것이 얼마나 쉬운 지 알았습니다. 정말 훌륭한 프로그램입니다.
Yann

나도 totalview. 나는 많은 경우에 그것을 사용하고 매우 비싸지 만 매우 강력합니다 ...
BlaB


1

OP가 선호하는 오픈 소스 및 무료 소프트웨어 인 Padb (Parallel Application Debugger)를 언급 하지 않았지만 상용 제품보다 강력하지 않은 이유는 무엇입니까?


-1

다음은 이전에 나에게 주어진 답변의 요약입니다.

OpenMP에는 타이밍 기능이 있습니다 : omp_get_wtime()omp_get_wtick()- 온라인 문서

구글은 CPU 프로파일 러를 가지고

OpenMP 및 MPI 프로파일 및 분석을 수행하는 Scalasca 가 있습니다

그런 다음 사용하지 않은 Tauvtune 이 있습니다.

행운을 빕니다!


나는 질문이 타이밍에 관한 것이라고 생각하지 않지만 잘못되었을 수 있습니다. 좋은 제안이지만 ...
Yann

이 답변은 디버깅보다 프로파일 링에 관한 것입니다 ...
mbq

프로파일 링 도구가 병렬 디버거를 대체하는 것으로 나타났습니다. 병렬 버그가 MPI의 logjam과 같은 성능 문제와 관련이있는 경우가 종종 있습니다. 퍼포먼스 툴은 종종 이것을 드러냅니다. TAU의 메모리 프로파일 러는 임의의 segfault가 발생할 수있는 이유를 파악하는 데 유용합니다.
Jeff
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.