2017-04-03 8 views
0

pythonスクリプトで複数のC++プログラムを実行する際に問題があります。 すべてのプロセスは細かく実行されており、すべてのプロセスは0エラーなどで終了しますが、プロセスはCPU上で100%実行されていません。私は同時に64個のプロセスを実行することができますcppプログラムがサーバで遅く実行する

#!/usr/bin/python 

import os, shutil, time, math 

from sys import * 

CPUs=64 
shs={} 
for i in range(CPUs): 
    fname="run"+repr(i)+".sh" 
    shs[i]=file(fname,"w") 
    #print "nohup bash "+fname+" &" 
    time.sleep(0.01) 

fin = file("adatokOriginal.txt") 
lines = fin.readlines() 
fin.close() 


# kezdpath = "./szimulaciok_n5_5240_"+str(n)+"/szimul_"+str(m)+"/instanc_"+str(l) 
# if(os.path.isdir(kezdpath)): 
# shutil.rmtree(kezdpath) 
# os.mkdir(kezdpath,0777) 

for m in range (5): 
    k=0 
    for j in range(33): 
    print(m,j) 
    mu=10**(-6) * j**(math.log(10,2)) 
    for i in range (1000): 
     fout = file("adatok.txt", "w+") 
     Pathpath = "./szimulaciok_n5_5240"+"_"+str(m)+"/szimul"+"_"+str(j)+"/instanc_"+str(i) 
     if (os.path.isdir(Pathpath)): 
     shutil.rmtree(Pathpath) 
     os.makedirs(Pathpath,0777) 
      for line in lines: 
     line=line.strip() 
       if line == "outputDir= default": 
       # fout.write("outputDir= "+str(path)+"/\n") 
        print("lel") 
       elif line == "mutrata= 1": 
        fout.write("mutrata= "+str(mu)+"\n") 
       elif line == "szintszam= 5": 
        n=5-m 
        fout.write("szintszam= "+str(n)+"\n") 
       #elif line == "mutrata= 0.1": 
       # fout.write("mutrata= "+str(1)+"\n") 
       else: 
        fout.write(line+"\n") 
      fout.close() 
      os.rename("./adatok.txt", Pathpath+"/adatok.txt") 
      shutil.copyfile("./gnuplotscriptOriginal.plt", Pathpath+"/gnuplotscriptOriginal.plt") 
k=0 
for c in range(5): 
     for b in range(33): 
     for a in range(1000): 
      path = "./szimulaciok_n5_5240"+"_"+str(c)+"/szimul"+"_"+str(b)+"/instanc_"+str(a) 
      shs[k%CPUs].write("cd "+path+"\n") 
      shs[k%CPUs].write("../../../szimu >/dev/null\n") 
      shs[k%CPUs].write("cd ../../..\n") 
      k = k+1 

for i in range(CPUs): 
    shs[i].close() 
for i in range(CPUs): 
    fname="run"+repr(i)+".sh" 
    os.chmod(fname,0777)  
    os.system("./"+fname+"&\n") 
    time.sleep(0.01) 

print("ok") 

、私は5回33回実行し、実行するために1000のプロセスを持っています。ここでは

はコードです。唯一の問題は、平均45%のCPU搾取があることです。

助けてください!

ありがとうございました!

答えて

2

パフォーマンスが低い理由は、各ループ反復中に大量のI/O操作が発生するためです。あなたのコードに見られるように、各反復では、ファイルにディスクへのアクセスが必要なものを書き込んでいます。 OSがディスクにアクセスすると、CPUは他の用途のために解放され、アプリケーションの合計パフォーマンスが低下します。 実際のCPUパフォーマンスをテストする場合は、IOコマンドをコメントして、計算などのCPU消費処理に置き換えるだけで十分です。次に、CPU使用率を測定します。

+0

いいえ...私のコードを正しく説明していないのは間違いです。したがって、最初の3つのループ(m、j、i)では、出力データに必要なディレクトリを作成し、各フォルダcppプログラムの入力データである "adatok.txt"を書き直します( "szimu"として実行されます)。出力データ。そして、ちょうど私が適切な入力データを持つフォルダを生成した直後に、私はcppプログラムを実行した直後に、Cbaループで64個のsimultaniously ... –

+0

もう一つの奇妙なことは、 PrintScreen:http://imgur.com/YezwLWY –

関連する問題