2017-10-27 5 views
0

年>月>日(ここで、日は実際に操作しているファイル)のフォルダ階層内にあるいくつかのファイルを処理しています。倍以上のマルチプロセッシング?

今私はそう一度に8つのファイルをやって、日レベルで並列化していますが、数ヶ月、さらには数年にわたり、あまりにもいくつかの外側の並列化を行うことが可能である場合、私は思ったんだけど?私は、並列化がどのように機能するかについて多くを知らない

pool = Pool() 
pool.starmap(convertDays, files) 

、convertMonths関数内で次に

pool = Pool() 
pool.starmap(convertMonths, months) 

、convertYears関数内で次に

pool = Pool() 
pool.starmap(convertYears, years) 

:私のような何かを行うことができますそれが私がここで尋ねる理由です。

答えて

1

はい、可能ですが、デフォルトでPoolは使用可能なプロセッサの最大数を使用します。つまり、一度に実行できるタスクの最大数を意味します。彼らはconvertMonthsを開始し、それらの意志のそれぞれは、512の総計になりました(8を開くとき、それはあなたが可能な8つのプロセッサを持っている場合convertYearsが一度に8を開くことを意味し、それらのそれぞれは、(現在64の合計)8を開きますプロセス)、それらのすべてには新しいプロセスの作成にかかる時間とメモリのオーバーヘッドが伴いますが、いずれにしても8つしか実行されません。 Pool(2)を使用して各レベルを制限しても、開始した場所と同じ8つのプロセスが同時に終了します。

かいつまんで、プログラムは同じように速くなり、あなただけの1つのレベルで並列化に固執する場合は、あなたのCPUはあなたを嫌いではありません。

+0

それはプロセッサの上に並列化することだけが可能かどうか、それはあまりにもスレッド上で行うことができる場合のおかげで、知っていますか?私がここで間違っていることは何でも許してください。しかし、コアあたり4つのコアと8つのスレッドがあるようですので、32のプロセスを実行できませんでしたか? [これは私のプロセッサです](https://ark.intel.com/products/97496/Intel-Core-i7-7820HQ-Processor-8M-Cache-up-to-3_90-GHz)。 os.cpu_count()は私に8番の数字しか与えませんが、もっと多くのものを与えるマルチプロセスには他にもいくつかの方法があると思います。私はここに何か? –

+0

はほとんどの場合、それは実際には4個のCPU数は、あなたがそれをスライス8.いずれかの方法を与える理由は、その数は、コンピュータが一度にできることの最大数ですコア、コアあたり2つの論理プロセッサ、プロセス、スレッド、またはですさもないと。 –

+0

お役立ち情報ありがとうございました!おそらくワームの可能性がある最後のものです:私のGPU上の単純なforループのこの種の並列化について知っていますか?私はAMD Radeon Pro 560を持っているので、TensorflowのようなものはNvidiaのみをサポートしているので問題はないと思いますが、おそらくあなたが知っているような簡単な方法がありますか? –

関連する問題