0
私はPythonに慣れていません。私は、次の擬似コードのために外側forループを並列化したい:Pythonでマルチスレッドを使ってループを並列化する方法
for(i=1 to N){ // N and n will be taken as input for the shell script.
min=some garbage value
for(j=1 to n){
val= './a.out' // call the executable a.out and take the output in val
if(val<min) // a.out is a random number generator script
min=val;
}
arr[k++]=min;
}
// Then I want to calculate the sum of the elements of the array 'arr'.
次のようにシェルスクリプトを使用しようとしました。しかし、Nは非常に大きくなる可能性があります。だから、私は外側のforループを並列化するために マルチスレッドを使用する必要があります。
#!/bin/bash
# set min to some garbage value
N=$1
n=$2
for ((i=1; i<=$N; i++)); do
min=100000000
for ((j=1; j<=$n; j++)); do
val=$(/path/to/a.out)
val2=`echo $val | bc` // is this the correct syntax?
if (($val2 < $min)); then
min=$val2;
fi
done
arr=("${arr[@]}" "$min")
done
# Then I want to calculate the sum of the elements of the array 'arr'.
sum=0
for ((l=0; l<${#arr[@]}; l++)); do
sum=$(expr $sum + ${arr[$l]})
done
echo "Sum of \$arr = ${sum}"
あなたの番号ジェネレータプログラムはかなりのCPU時間を要しますか?そうでなければ、複数のスレッドで内部ループを実行することでほとんど利益を得られません。 min値を計算するために一度だけ、そしてarrを更新するために一度だけ同期が必要です。 – Abhijit
コンパイル済み乱数ジェネレータを使用する必要がありますか? Pythonには 'random'モジュールがあります。 Pythonは配列のすべての要素を組み込み 'sum'関数で追加することもできます(例えば、' sum([1,2,3]) 'は6の答えを得ます)。 –