데이터 파일을 입력으로 사용하는 "Analytic.C" 파일이 있다고 가정해 보겠습니다. 데이터 파일의 이름은 "a.00001.txt"부터 "a.01000.txt"까지입니다. 모든 파일을 반복하는 한 가지 방법은 sed
"Analytic.C"의 입력 파일 이름을 0001에서 1000까지 반복적으로 변경하는 데 사용하는 쉘 스크립트를 작성하는 것입니다. 하지만 한 번에 하나의 입력 파일을 실행해야 합니다.
내가 원하는 것은 "Analytic.C" 파일의 여러 인스턴스를 병렬로 실행하고 각 인스턴스에서 서로 다른 입력을 받는 것입니다(여기서 제약 조건은 내 컴퓨터에 여유할 수 있는 코어 수인 것 같습니다). 동시에 발생합니다. 어떻게 해야 하나요?
답변1
GNU Parallel을 사용하면 다음을 수행할 수 있습니다.
parallel analysis.C ::: *.txt
.txt
또는 - 파일이 많은 경우 :
printf '%s\0' *.txt | parallel -0 analysis.C
기본적으로 각 CPU 스레드는 하나의 작업을 실행합니다. 이는 -j20
20개의 병렬 작업에 맞게 확장될 수 있습니다.
- 솔루션 과 달리 parallel.moreutils
출력을 사후 처리할 수 있습니다. 출력이 직렬화되므로 두 작업의 혼합 출력이 표시되지 않습니다.
GNU Parallel은 동일한 컴퓨터 또는 SSH를 통해 액세스할 수 있는 여러 컴퓨터에서 작업을 병렬로 쉽게 실행할 수 있게 해주는 범용 병렬 처리기입니다.
4개의 CPU에서 32개의 서로 다른 작업을 실행하려는 경우 병렬화하는 간단한 방법은 각 CPU에서 8개의 작업을 실행하는 것입니다.
대신, GNU Parallel은 작업이 완료되면 새로운 프로세스를 생성하여 CPU를 활성 상태로 유지하여 시간을 절약합니다.
설치하다
보안상의 이유로 패키지 관리자를 사용하여 GNU Parallel을 설치해야 하지만 GNU Parallel이 배포용으로 패키지되어 있지 않은 경우 루트 액세스가 필요하지 않은 개인 설치를 수행할 수 있습니다. 이 작업은 10초 안에 완료할 수 있습니다.
(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash
다른 설치 옵션은 다음을 참조하세요.http://git.savannah.gnu.org/cgit/parallel.git/tree/README
더 알아보기
더 많은 예시 보기:http://www.gnu.org/software/parallel/man.html
소개 비디오 보기:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
이 튜토리얼을 살펴보세요:http://www.gnu.org/software/parallel/parallel_tutorial.html
이 책을 읽어보세요:https://doi.org/10.5281/zenodo.1146014
지원을 받으려면 이메일 목록에 가입하세요.https://lists.gnu.org/mailman/listinfo/parallel
답변2
parallel
명령( 여러 배포판의 패키지)을 참조하세요 moreutils
. 매뉴얼 페이지에서:
지정된 명령을 병렬로 실행하여 지정된 단일 인수를 전달합니다. 이는 각 매개변수에 대해 반복됩니다. 작업은 병렬로 실행될 수 있습니다. 기본적으로 CPU당 하나의 작업이 실행됩니다.
그래서:
parallel analysis.C -- a.0????.txt