Linuxの下でShellスクリプトを用いてマルチプロセスの実行学術実験

1897 ワード

最近、学術的な仕事で忙しくて、1つのプロジェクトでは、get resultsのために異なるプロファイルをそれぞれ読み込んで同じアルゴリズムを実行するプログラムを複数回実行する必要があります.
この場合,linuxでは単純な手動実行は非常に遅れている.デブ私はプログラム猿としてもちろんそんなことはできません.では合計すると、便利な方法は2つあります.1つはマルチスレッド、1つはマルチプロセスです.
1、マルチスレッドこのような学術プログラムマルチスレッドは実は非常に良い方法であり、butはアルゴリズムの再研究を経て、実際にマルチスレッドができる部分は多くなく、1つのnetworkファイルだけが共有されていることを発見し、他の多くのステップは同じであるが、最初は他の異なるファイルを読んだため、前期には同じ変数に全く異なるdatasが格納されていることが多いため,この方式は便利ではない.
2、マルチプロセスマルチスレッドが不便である以上、マルチプロセスをやりましょう.他には言わないで先にコードをつけて
#!/bin/bash

g++ -o3 academicCode.cpp -o runAC 		//   cpp  ,       
rm -rf result/*/result*				//               ,   *                 
echo result/*/* | xargs -n 1 cp -v runAC	//     runAC             
cd result/					//                

for ((i=100; i<=250; i++))			//            100     250  ,                 
do						//      
{
	if [ -d $i ]; then			//           ,            ,        ;                    
		cd $i				//  $i    ,  nohup ./XXX &          
		nohup ./runAC network.dat configution.dat 100 12 -10 -11 1 2 3 5 7 10 15 25 40 55 75 100  >/dev/null 2>&1 &
						// >/dev/null         /dev/null ,         ,    get  screen output ,                ,       
						// 2>&1              
						//                 ,            (   ,      )
		nohup ./program >/dev/null 2>/dev/null &
		cd ..
	if
} &
done
wait						//     ,    

cd ../..					//   top        
top

このshellスクリプト、acrunと名付けました.sh.実行するコマンドはsource acrunです.sh.このような実行の目的は、sourceが./acrun.shの方式はsourceをサブshellで実行させ,不要な異常エラーを回避する.
はい、実は言えることはすべて注釈の中で悪くないと言って、核心は1つのfor循環で、せいぜい1つのロットの複製を追加します.デブ私のアルゴリズムには収束しない問題があるので、最近はresultが空のcodeを検出して統合し、最終get good resultsまで自動的にrandomパラメータを設定する必要があります.
[补充]:.shスクリプトはlinuxでvi-b runACを使用する必要がある.shのコマンド編集、そうしないと、これが実行できないことに気づく可能性があります.shスクリプト、butはエラーに基づいて問題が見つかりません.それはwindowや通常のlinuxの編集環境でshスクリプトの各行に^Mを付けるからですよ.
小さなコード、みんなで励ましてほしい.Cheers~~~~~~