1

Python multiprocessing モジュールと並行して関数を実行しています。この関数は、画像を入力として受け取り、いくつかの測定値を出力します。問題は、time.time() と time.clock() の結果を比較したところ、壁の時間が CPU 時間よりもずっと長いようです。240 秒と 0.22 秒のようなものです!!

私の理解が正しければ、これは CPU が関数の実行に 1 秒未満しか費やしておらず、ほとんどの場合、読み取り/書き込み/ディスクなどを待っていることを意味します。これは正常に聞こえますか? 私は公共のスーパーコンピューティング センターを使用しています (非常に強力ですが)、他のユーザーも cpu ノードを使用していて、私が待たなければならなかったためかどうかはわかりません。

以下は私のコードです。コードの一部が原因である可能性があるかどうかを指摘していただけますか? どうもありがとうございました!

import cv2
import glob
from joblib import Parallel,delayed   # this is for parallel computing
import time as t
from Function_ImageMeasure_sz import salinency, color_HSV,rot_balance

mypath='C:/Research/Data/Images/*.jpg'
# define function that will be executed in parallel
def get_measurement(file_name):
    img = cv2.imread(file_name)  # read image
# the following steps are computing some metrics over the input image
    contours,ind,centroid=salinency(img)
    d_rot,balance=rot_balance(img,centroid)
    color_rank, color_tone,bright_stat,saturate_stat,clear_dull,symmetry=color_HSV(img)
    result=[d_rot,balance,centroid,color_rank,color_tone,bright_stat,saturate_stat,clear_dull,symmetry]
    return result

# call function 
files=glob.glob(mypath) # input all images in the same folder
njob=2 # define how many threads/pipelines in parallel

t1=t.clock()
t3=t.time()
# this is implement the function in parallel
results=Parallel(n_jobs=njob,backend='multiprocessing')(map(delayed(get_measurement),files)) 
t2=t.clock()
t4=t.time()

# output results
print 'processing %s image takes %s seconds (wall-time), %s seconds (cpu-time) with %s threads/cores'%(len(files),t4-t3,t2-t1,njob)`
4

0 に答える 0