n 개의 코어와 병렬 인 bash for 루프


0

나는 bash 루프는 다음과 같습니다.

for i in $(seq 0 $max); do
    my_command $i
done

이걸 병렬로 실행하고 싶습니다. n 코어. 내가 할 수 있음을 안다.

while [[ "$j" -le "$max" ]]; do
    for i in $(seq 1 $ncores); do
        my_command $j &
    done
    wait
done

그러나 만약 my_command 의 런타임은 선형입니다. $i, 그때 나는 가장 긴 실행 기능을 기다려서 CPU 사이클을 낭비하고 있습니다. 새 작업을 계속해서 어떻게 파견 할 수 있습니까? $ncores 작업이 주어진 시간에 실행되고 있습니까? 다음과 같이 실제 작업 스케줄러를 실행해야합니까? torque 이 작업을 수행하기 위해 내 컴퓨터에 로컬로 설치하거나 간단한 방법으로이 작업을 수행 할 수 있습니까? bash 스크립트?

답변:


0

GNU 병렬 사용 :

seq 0 $max | parallel my_command {}

이 설정으로 $ 점수를 어떻게 바꿀 수 있습니까?
drjrm3

-jX 여기서 X는 병렬로 실행할 작업 수입니다. 기본값은 코어의 수입니다.
Ole Tange

0

또는 xargs를 사용하십시오.

seq 1 $max | xargs -n1 -P$ncores -I% mycommand %

작동 원리는 다음과 같습니다.

seq 1 9 | shuf | xargs -n1 -P3 -I% sh -c 'echo start %; sleep %; echo stop %'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.