私は次の機能を持っています:
1) hdf5 データセットを整数の ASCII コードとして読み込みます
2) ASCII 整数を文字に変換します... chr() 関数
3) 文字を単一の文字列関数に結合します
プロファイリングを行ったところ、計算の大部分が手順 2 である ASCII 整数から文字への変換に費やされていることがわかりました。以下を使用して、この呼び出しを多少最適化しました。
''.join([chr(x) for x in file[dataSetName].value])
私の解析関数は CPU バウンド (整数から文字への変換) であり、i/o バウンドではないように思われるため、解析に専念するコアの数によって多かれ少なかれ線形速度が向上することを期待していました。1 つのファイルを連続して解析するには ~15 秒かかります... 10 個のファイルを解析するには (12 コアのマシンで)、10 個のスレッドを使用しているときに ~150 秒かかります。つまり、まったく強化されていないように見えます。
次のコードを使用してスレッドを起動しました。
threads=[]
timer=[]
threadNumber=10
for i,d in enumerate(sortedDirSet):
timer.append(time.time())
# self.loadFile(d,i)
threads.append(Thread(target=self.loadFileargs=(d,i)))
threads[-1].start()
if(i%threadNumber==0):
for i2,t in enumerate(threads):
t.join()
print(time.time()-timer[i2])
timer=[]
threads=[]
for t in threads:
t.join()
どんな助けでも大歓迎です。