여러 호출 간의 총 GNU 병렬 작업 수를 제한합니다.

여러 호출 간의 총 GNU 병렬 작업 수를 제한합니다.

저는 10,000개의 코어가 있는 컴퓨터를 사용하고 있지만 한 번에 1,000개의 코어에만 액세스하도록 허용합니다.

여러 곳에서 GNU 병렬 처리의 이점을 활용하는 스크립트가 있습니다. 레벨 A를 병렬화하고 이 스크립트 내에서 30배 더 많은 작업을 수행합니다.

--link병렬성과 구문을 사용하기 위해 전체 스크립트를 다시 작성하려면 많은 작업이 필요합니다 ::: A B C ::: $(seq 30).

parallel두 개의 독립적 호출이 둘 사이의 총 작업 수를 1000개로 제한할 만큼 충분히 통신할 수 있는 방법이 있습니까 ?

답변1

제가 올바르게 이해했다면 귀하는 GNU Parallel을 2개(또는 그 이상) 인스턴스를 실행하고 총 실행 작업 수가 1000개 미만이기를 원한다는 것입니다.

따라서 어떤 시점에서는 그 중 하나가 300개의 작업을 실행하고 다른 하나는 700개의 작업으로 제한되어야 합니다.

--limit이 특별한 경우를 위해 설계되었습니다. 선택한 스크립트를 실행하고 종료 값에 따라 작업 수를 제한합니다.

이제 실행 중인 총 작업 수를 결정하는 방법이 필요합니다.

어쩌면 뭔가요 [ $(ps aux | grep myprogram | wc -l) -gt 1000 ]?

(어떤 괴물이 10,000개의 코어를 가지고 있나요?)

답변2

또 다른 해결책은 --sqlmaster/--sqlworker.

1000초를 생성 --sqlworker하고 실행할 작업을 데이터베이스에 넣습니다 --sqlmaster.

master1$ seq 10000 | parallel --sqlmaster +pg://user:pass@server/db/table sleep 1.1{}
# The + is needed to append to existing table
master2$ seq 4000 | parallel --sqlmaster +pg://user:pass@server/db/table sleep 1.2{}

worker1..1000$ parallel --sqlworker +pg://user:pass@server/db/table 

나는 이것이 버전에 덜 민감하다고 생각합니다 --limit. 특히 단일 시스템이 아닌 클러스터에서 실행 중이기 때문입니다.

관련 정보