HTCondor 사용법: 두 판 사이의 차이

3,524 바이트 추가됨 ,  2023년 4월 10일 (월)
편집 요약 없음
편집 요약 없음
편집 요약 없음
18번째 줄: 18번째 줄:


=== 입출력 구분 ===
=== 입출력 구분 ===
프로그램을 병렬화할 때에는 어떤 입력에 대해 어떤 출력을 받아내야하는지를 확실히 해야합니다. 프로그램을 일종의 '''입출력이 있는''' '''함수''' 로 생각하면 편합니다.
==== 출력값 분리 ====
입력값보다 중요한 것은 출력값을 분리하는 것입니다. HTCondor 를 통한 작업이 종료된 후 출력 파일이 이동될 때 UI 머신의 한 폴더로 모이게 되는데, 만약 출력되는 파일 명이 겹칠 경우 '''대개 덮어쓰기 됩니다.''' 그래서, 출력되는 파일 명이 모두 다를 수 있도록 출력될 프로그램의 argument 로 출력될 파일명 또는 파일 번호와 관련된 정보를 받아야 합니다.
===== 출력 파일 구분을 할 수 없는 프로그램의 경우 =====
일반적인 상황은 아닙니다만, 프로그램의 상태에 따라 출력 파일명을 지정할 수 없는 경우가 있습니다. '''어쨌든 간에 출력 파일명은 구분되어야 합니다.''' 이 경우에는, 하나의 실행파일로 구동하는 것이 안되므로 (이후 mv 등으로 파일명을 바꾸어야 하므로) "작업 과정 구상" 을 거쳐야만 합니다. 이후 과정을 참고하세요.
==== 랜덤 시드 부여 ====
몬테카를로 시뮬레이션과 같이 무작위 연산이 포함되어있을 경우 랜덤 시드를 job 에 따라 별도 부여해야합니다. 랜덤 시드가 겹치는 작업이 있을 경우, '''제대로된 시뮬레이션이 되지 않을 수 있습니다.''' 랜덤 시드를 부여하는 방법은 어느 라이브러리의 어느 생성기를 쓰느냐에 따라 다릅니다만, C++ 의 ''<cstdlib>'' 를 활용하는 경우 ''srand'', ROOT 의 TRandom을 쓸 경우 TRandom::SetSeed 를 활용하면 됩니다.
일반적인 프로그램에서 랜덤 시드를 무작위 지정할 때, 프로그램이 구동되는 시간과 관련된 시드를 쓰는 경우가 많습니다만, '''HTCondor''' '''병렬 연산에서는 그래서는 안됩니다.'''<ref>테스트 목적의 프로그램에서도, 시드는 일반적으로 바꾸지 않습니다. 여러 조건에 대해 프로그램을 테스트할 때 특정 조건에서 일어나는 버그의 경우 시드가 변동되지 않아야 버그 및 디버깅 조건을 파악할 수 있습니다.</ref> HTCondor 를 통해 생성한 작업은 언제 작동할 지 알 수 없으며, 그에 따라 랜덤 시드가 작업마다 겹칠 가능성이 있습니다. 그렇기 때문에, 랜덤 시드는 외부에서 겹치지 않도록 부여하는 것이 맞습니다. 프로그램의 argument 를 통해 넣도록 세팅하면 됩니다. 어떻게 개개 프로그램마다 다른 시드값을 넣을 수 있는지는 condor_submit 에서 다룹니다.
==== 입력값 부여 ====
위 사항을 고려하여, 프로그램에 필요한 입력값을 명확히 합니다. 이후, Argument 를 부여하는 과정으로 이동합니다. 보통, 다음과 같은 사항이 입력값으로 생각됩니다.
* 프로그램에 입력되어야 하는 숫자나 문자
** 랜덤 시드 포함
* 입출력 파일과 관련된 문자나 숫자
** 입출력 파일명 등


=== Argument 부여 ===
=== Argument 부여 ===
위의 입출력 조정 작업을 거친 후, 각 프로그램에 Argument 를 넣을 수 있도록 작업합니다. 대부분의 executable 을 만들 수 있는 프로그램은 argument 를 입력할 수 있도록 방법을 지원합니다. 본 문서에서는 C/C++, python 의 경우만 다룹니다.


==== C++ ====
==== C/C++ ====
<syntaxhighlight lang="c++">
<syntaxhighlight lang="c++">
int main(int argc, char** argv) { … }
int main(int argc, char** argv) { … }
64번째 줄: 85번째 줄:


</syntaxhighlight>
</syntaxhighlight>
=== 출력 파일 구분 ===


== condor_submit ==
== condor_submit ==