데이터의 다른 부분을 분석하기 위해 대형 컴퓨터 클러스터에서 코드를 실행하려고합니다.bash의 matlab 배치 병렬 처리
다른 노드에 작업을 할당하기 위해 2 개의 루프를 만들고 노드에 포함 된 CPU를 할당했습니다.'chnJob()'이라고 쓰는 분석 함수는 데이터를 분석해야하는 부분 (이 경우 'chn'이라는 쉘 변수)을 알기 위해 인덱스를 가져와야합니다.
루프는 다음과 같이이다 :
이for NODE in $NODES; do # Loop through nodes
for job_idx in {1..$PROCS_PER_NODE}; do # Loop through jobs per node (8 per node)
echo "this is the channel $chn"
ssh $NODE "matlab -nodisplay -nodesktop -nojvm -nosplash -r 'cd $WORK_DIR; chnJob($chn); quit'" &
let chn++
sleep 2
done
done
내가 CHN 변수가 적절하게 증가되고 있음을 볼 수 있지만, matlab에 함수에 전달 CHN의 값이 항상 CHN의 마지막 값입니다.
아마도 이것은 matlab이 각 노드에서 열 때 많은 시간이 걸리고 bash가 그때까지 루프를 완료했기 때문일 수 있습니다. 따라서 각 MATLAB 인스턴스에 전달되는 값은 마지막 값뿐입니다.
이를 피할 방법이 있습니까? 함수를 호출 할 때 해당 변수의 값을 구울 수 있습니까?
아니면 완전히 다른 문제입니까?