ACEnet: Placentia
我がメモリアル大のスパコンクラスターPlacentiaのhead nodeとshort.qで計算時間に違いが。前者だと5分で終わる計算が後者だと1時間もかかった。違いは何か。メモリ(
RAM)量?とりあえずhead nodeのときは容量がわからない。short.qではデフォルト値が2GB。
short.qで8GBメモリリクエストすると50分で計算できた。大して変わらない。Placentiaはユーザー数が多いせいか本来より長い時間かかるような気がする。
PISCESのパラメーターが80ちかくあることに気づいたのでループを新しくスクリプトに追加することにした。以下がコード:
# Start of Input. Modify below #
set_parnam="conc3 conc3m" # set of names of parameters to analyze.
set_stdval="3.0 8.0" # set of standard PISCES values of the above parameters.
floats=6 # number of decimal places.
# End of Input. Do NOT modify below #
parnam=($set_parnam)
stdval=($set_stdval)
count=${#parnam[@]}
for it in `seq 1 $count`
do
para=0
echo $para >> SA_stat.txt
grep "${parnam[$it-1]} " namelist_pisces >> SA_stat.txt
for newnum in $(seq `echo "scale=${floats};${stdval[$it-1]}*0.5" | bc` `echo "scales=${floats};${stdval[$it-1]}*0.1" | bc` `echo "scales=${floats};${stdval[$it-1]}*0.5+${stdval[$it-1]}" | bc`)
do
sed -i -r "s/${parnam[$it-1]}\s+=\s+[0-9]+\.*[0-9]*/${parnam[$it-1]} = ${newnum}/" namelist_pisces
./opa
para=$((${para}+1))
echo $para >> SA_stat.txt
grep "${parnam[$it-1]} " namelist_pisces >> SA_stat.txt
mv LABSEA_1m*_ptrc_T.nc ../MY_SRC/SA/${parnam[$it-1]}${para}.nc
rm LABSEA_*restart*.nc
done
echo "end of run for ${parnam[$it-1]}" >> SA_stat.txt
sed -i -r "s/${parnam[$it-1]} += +[0-9]+\.*[0-9]*/${parnam[$it-1]} = ${stdval[$it-1]}/" namelist_pisces
done
ちょっと手こずったのは青色でハイライトされているところ。少数計算はechoとbcコマンドを使ってできることは知ったが割り算で答えが1以下になる場合は0となってしまう問題があることに気づいた。例えば:
echo "1/2" | bc
と入力しても0.5という答えにはならず「0」となってしまう。
どうしたら良いか考えた結果、割り算をかけ算に直すことにした。例えばさっきの場合だと1÷2ではなくて1× 0.5と置き換えることにした。割り算は極力避けた方がいいかもな。たぶん解決策はあるんだろうけど。
このスクリプトをhead nodeで試してみると2つのパラメータで合計20分で計算できた。ひとつあたり10分計算。早い。しかもcpuもそんなに使わない(20%程度)なのでたぶん走らせといても何も言われないだろう。nohupで夜行列車モードだな。
short.qで8GBメモリリクエストすると50分で計算できた。大して変わらない。Placentiaはユーザー数が多いせいか本来より長い時間かかるような気がする。
PISCESのパラメーターが80ちかくあることに気づいたのでループを新しくスクリプトに追加することにした。以下がコード:
# Start of Input. Modify below #
set_parnam="conc3 conc3m" # set of names of parameters to analyze.
set_stdval="3.0 8.0" # set of standard PISCES values of the above parameters.
floats=6 # number of decimal places.
# End of Input. Do NOT modify below #
parnam=($set_parnam)
stdval=($set_stdval)
count=${#parnam[@]}
for it in `seq 1 $count`
do
para=0
echo $para >> SA_stat.txt
grep "${parnam[$it-1]} " namelist_pisces >> SA_stat.txt
for newnum in $(seq `echo "scale=${floats};${stdval[$it-1]}*0.5" | bc` `echo "scales=${floats};${stdval[$it-1]}*0.1" | bc` `echo "scales=${floats};${stdval[$it-1]}*0.5+${stdval[$it-1]}" | bc`)
do
sed -i -r "s/${parnam[$it-1]}\s+=\s+[0-9]+\.*[0-9]*/${parnam[$it-1]} = ${newnum}/" namelist_pisces
./opa
para=$((${para}+1))
echo $para >> SA_stat.txt
grep "${parnam[$it-1]} " namelist_pisces >> SA_stat.txt
mv LABSEA_1m*_ptrc_T.nc ../MY_SRC/SA/${parnam[$it-1]}${para}.nc
rm LABSEA_*restart*.nc
done
echo "end of run for ${parnam[$it-1]}" >> SA_stat.txt
sed -i -r "s/${parnam[$it-1]} += +[0-9]+\.*[0-9]*/${parnam[$it-1]} = ${stdval[$it-1]}/" namelist_pisces
done
ちょっと手こずったのは青色でハイライトされているところ。少数計算はechoとbcコマンドを使ってできることは知ったが割り算で答えが1以下になる場合は0となってしまう問題があることに気づいた。例えば:
echo "1/2" | bc
と入力しても0.5という答えにはならず「0」となってしまう。
どうしたら良いか考えた結果、割り算をかけ算に直すことにした。例えばさっきの場合だと1÷2ではなくて1× 0.5と置き換えることにした。割り算は極力避けた方がいいかもな。たぶん解決策はあるんだろうけど。
このスクリプトをhead nodeで試してみると2つのパラメータで合計20分で計算できた。ひとつあたり10分計算。早い。しかもcpuもそんなに使わない(20%程度)なのでたぶん走らせといても何も言われないだろう。nohupで夜行列車モードだな。
0 件のコメント:
コメントを投稿