SIFT生成処理は順次実行していたのだが、SIFT生成の問題点が改善したので、並列実行に戻したいと思う。
SIFT生成オプションに合わせて、設定を変更していく。特に、 response_files は使用しない。
# 変更前
"${QEMU}" ${QEMU_FLAGS} -plugin "${QEMU_FRONTEND_PLUGIN}",verbose=on,response_files=on,fast_forward_target=${fast_forward_target},detailed_target=${detailed_target},output_file="${output_base}" ${cmd_suffix_noL}
# 変更後
"${QEMU}" ${QEMU_FLAGS} -plugin "${QEMU_FRONTEND_PLUGIN}",verbose=on,response_files=off,fast_forward_target=${fast_forward_target},detailed_target=${detailed_target},output_file="${output_base}" ${cmd_suffix_noL}
run_sift_benchmark.shでは、各SimPointのSIFT生成スクリプトを生成し、parallelコマンドを使用して並列実行する。
# Execute all generated script files in parallel
if [ -f "$all_script_list_file" ] && [ -s "$all_script_list_file" ]; then
num_scripts=$(wc -l < "$all_script_list_file")
echo "=== Executing $num_scripts scripts in parallel ==="
cat "$all_script_list_file" | \
SHELL=/bin/bash parallel --line-buffer -j ${PARALLEL_JOBS} bash '{}' 2>&1 || {
echo "Warning: Some scripts failed. Check logs in ${sift_dir_abs}" >&2;
};
rm -f "$all_script_list_file"
fi
並列ジョブ数は環境変数PARALLEL_JOBSで制御され、デフォルトはCPU数である。ファイルハンドル制限を考慮し、最大8ジョブに制限されている。