클러스터 시스템을 통해 4개 노드에서 각각 3개의 프로세스들을 사용한 작업을 총 4개 정도 수행시키는데 이 작업들이 semop lock failed 또는 semget failed for setnum: 0  이 두종류의 메시지를 보여주고 종료되었습니다.
 
기존 연구실 서버에서 수행하는 것보다 수행속도가 워낙 빨라 유용하게 사용할 수 있을 것이라 생각되는데
위와 같은 오류를 만나 해결하지 못하고 있습니다.
검색해본 결과로는 cleanipcs 스크립트를 작업 수행전에 실행시키라는 방법 정도밖에 찾을 수 없었습니다.

이것은 mpirun을 처음 make할때 -comm=shared 옵션이 기본적으로 내장되어 있기 때문에
위와 같은 오류가 발생하고 있다고 몇몇 guide들이 언급하고 있는데요 이 에러가 발생하더라도 이를 탐지하고 기다리게 할 수 있는 방법들이 있는지 궁금합니다.

감사합니다.

 

 ------------------------------------------------------------------------------------------------

알려주신 내용에 대해 확인 및 점검을 하여보니 아래와 같았으며, 현재 테스트 한 바로는 문제가 발생했던 MPItest 코드가 정상적으로 실행되었습니다.

 

 

1. mpich 설치시  -comm=shared 옵션을 설정한 이유는

 

각 노드에 2개의 CPU가 같은 메모리를 공유하는 SMP 형태의 노드이기 때문에 설정한 것인데, 

(같은 노드 내의 프로세스는 굳이 메시지 전달로 메모리 데이터를 공유할 필요가 없으므로  

이들 사이에는 ch_shmem 방식을 사용하라고 지정한 것임.) 

만약, 이 인자를 끄게되면 같은 노드의 프로세스도 메시지 전달로(네트워크로 데이터가 나갔다가 다시 들어오는 과정이 발생) 메모리

 데이터를 공유하여 성능 저하가 발생됩니다.

 

 2. 각 노드에서 $cleanipcs 명령 실행을 통한 해결

 

 본 클러스터 장비의 경우 다수의 사용자가 사용하고 있어, 자원 사용에 대한 경쟁이 다소 있는 상황입니다.

 이로인해 각종 에러들이 발생할 수 있는데요... 이럴때는 semaphores를 초기화해 주는 방법이 해결안이 될 수 있습니다.

 이에 본 클러스터에서는 각 노드에 cleanipcs 명령을 이용해서 bemscho님의 코드를 실행하였더니,

 정상적으로 실행되었습니다. 만약, 향후에도 동일 문제 발생시 각 노드에서 cleanipcs 명령을 실행하시거나 연락주시기 바랍니다.

 [bemscho@node001 test]$ ls
02181out.txt  out.txt             parallel.sh.e34517  parallel.sh.e34524  parallel.sh.e34527  parallel.sh.o34518  parallel.sh.o34525
02out.txt     parallel.sh         parallel.sh.e34518  parallel.sh.e34525  parallel.sh.o34516  parallel.sh.o34523  parallel.sh.o34526
MPItest       parallel.sh.e34516  parallel.sh.e34523  parallel.sh.e34526  parallel.sh.o34517  parallel.sh.o34524  parallel.sh.o34527

 


[bemscho@node001 test]$ cat out.txt
This is 0 rank processor among 6 processors
argc 3
argv[0] : /home/bemscho/Desktop/test/MPItest
argv[1] : 6
argv[2] : 100
Correct sum is 28.000755
[T] 1th Sum is 28.000755(1,1946738336)
[T] 2th Sum is 28.000755(1,1946738336)
[T] 3th Sum is 28.000755(1,1946738336)
[T] 4th Sum is 28.000755(1,98856352)
[T] 5th Sum is 28.000755(1,98856384)
Correct sum is 56.001509
[T] 1th Sum is 56.001509(1,1946738336)
[T] 2th Sum is 56.001509(1,1946738336)
[T] 3th Sum is 56.001509(1,1946738336)
[T] 4th Sum is 56.001509(1,1946738336)
[T] 5th Sum is 56.001509(1,1946738336)
Correct sum is 84.002264
[T] 1th Sum is 84.002264(1,1946738336)
[T] 2th Sum is 84.002264(1,1946738336)
[T] 3th Sum is 84.002264(1,1946738336)
[T] 4th Sum is 84.002264(1,1946738336)
[T] 5th Sum is 84.002264(1,1946738336)
Correct sum is 112.003019

 

 ※semaphores ; 세마포어

 프로그래밍, 특히 유닉스시스템의 프로그래밍에서 세마포어는 운영체계의 자원을 경쟁적으로 사용하는 다중 프로세스에서, 행동을 조정하거나 또는 동기화 시키는 기술이다. 세마포어는 운영체계 또는 커널의 한 지정된 저장장치 내 값으로서, 각 프로세스는 이를 확인하고 변경할 수 있다. 확인되는 세마포어의 값에 따라, 그 프로세스가 즉시 자원을 사용할 수 있거나, 또는 이미 다른 프로세스에 의해 사용 중이라는 사실을 알게되면 재시도하기 전에 일정 시간을 기다려야만 한다. 세마포어는 이진수 (0 또는 1)를 사용하거나, 또는 추가적인 값을 가질 수도 있다. 세마포어를 사용하는 프로세스는 으레 그 값을 확인하고, 자원을 사용하는 동안에는 그 값을 변경함으로써 다른 세마포어 사용자들이 기다리도록 해야한다.

세마포어들은 일반적으로 메모리 공간을 공유하거나, 또는 파일들을 공유 액세스하기 위한, 두 가지 정도의 목적을 위해 사용된다. 세마포어들은 프로세스간 통신(IPC)을 위한 기술 중하나이다. C 프로그래밍 언어는 세마포어들을 관리하기 위한 일련의 인터페이스 또는 함수들을 제공한다