2017-09-11 18 views
2

私はC++の人です。私は並列処理が大好きで、HPCアプリケーションが好きで、OpenMPもよく知っています。今、私はPythonを学んでおり、私は基本を知っています。簡単にPythonで並列を実装するには?

私のPythonスキルを向上させるための個人的なプロジェクトとして、Elkan algorithm for k-meansの並列バージョンを実装したいと思います。このアルゴリズムのCおよびOpenMPで実装された並列バージョンはpresent in VLFeatです。

今、私はPythonでElkanアルゴリズムを簡単に実装する方法を知っています...しかし、並列性はどうですか? OpenMPについての素晴らしい点は、シリアルコードを取得し、#pragma omp parallel forとSBAMを追加することです。これは並列です!

どうすればPythonで同様のことを達成できますか?あるいは、並列アルゴリズムを最初から設計しなければならない、すなわち、直列バージョンを最初に書いておかないと、それを並列にする必要がありますが、スレッドを明示的に管理するなど(これは大きな苦痛です)?

+3

なる:Pythonでマルチスレッドは、CPUにバインドされたアプリケーションのために(ない逆効果の場合)無用です。代わりにマルチプロセッシングが必要です。ありがとうございます[GIL](https://wiki.python.org/moin/GlobalInterpreterLock)。素晴らしいリファレンス[here](http://www.dabeaz.com/python/UnderstandingGIL.pdf) –

+0

これはいくつかの有用な参考文献を持っているかもしれません:[NumPy/SciPy内の並列および分散プログラミング](https://www.scipy.org/topical-software.html#parallel-and-distributed-programming)。 – jdehesa

答えて

0

最初に、PythonのCPU並列性は、ネイティブコードまたは複数のプロセスを介してのみ取得できます。

第2に、OpenMPの類推はmultiprocessingモジュールです。

これは多くのことが起こっていますが、単純なループなどでは使いやすいです。

results = map(operation, things) 

は、あなたがそれを認識しているだけので

import multiprocessing 
pool = multiprocessing.Pool() 
results = pool.map(operation, things) 
+0

だから、並列処理はマルチスレッドではなく、複数のプロセスだけを割り当てることで、Pythonでは達成可能ですうわー、それは過度の音です! – justHelloWorld

+0

Pythonのスレッドは、[Global Interpreter Lock](https://wiki.python.org/moin/GlobalInterpreterLock)のためにC++のスレッドと比較して非常に制限されています – shanmuga

+0

@justHelloWorld、プロセス対スレッドのオーバーヘッドは必ずしもすべてではありませんそれはプログラムによって異なります。 Python、MRI Ruby、Javascriptはすべてマルチプロセッシングのパラダイムを使用します。利点がないわけではありません。 C++の並列処理には、[MPI](http://mpitutorial.com/)を聞いたことがあります。 –

関連する問題