あります」と述べています。 "、彼は長い間物理的な量の指数関数的な成長は不可能であることを認めました。トランジスタとその製造技術の進化によってのみ、法則をさらに数世代に拡張することが可能になりました。
2007年、ムーアは、物質の原子的性質と光の制限の速度のために、法律は明らかにすぐに機能しなくなると述べました。現在、プロセッサ内のトランジスタの最大サイズは5ナノメートルです。 3nmプロセッサの試用サンプルもありますが、そのリリースは2021年まで開始されません。これは、チップ上のトランジスタ数のさらなる増加がすぐに停止することを示唆しています(新しい材料が発見されるか、技術プロセスが根本的に更新されるまで)。
この問題の解決策の1つは、並列コンピューティングです。この用語は、プログラムが並行して(同時に)動作する一連の相互作用する計算プロセスとして開発される、コンピューター計算を編成するそのような方法として理解されます。
同期方式による並列計算は2種類に分けられます。
最初のバリアントでは、プロセスは共有メモリを介して相互作用します。マルチプロセッサシステムの各プロセッサで個別の実行スレッドが起動されます。すべてのスレッドは1つのプロセスに属しています。スレッドは、特定のプロセスの共有メモリ領域を介してデータを交換します。スレッドの数は、プロセッサの数に対応します。ストリームは、プログラミング言語(Java、C#、C ++ 11のC ++、C11のCなど)を使用するか、ライブラリを使用して作成されます。この場合、スレッドを明示的に(たとえば、PThreadsを使用してC / C ++で)、宣言的に(たとえば、OpenMPライブラリを使用して)、または自動的に(たとえば、組み込みのコンパイラツール(たとえば、High Performance Fortran)を使用して)作成できます。説明されている並列プログラミングの変形では、通常、何らかの形式の制御キャプチャ(ミューテックス、セマフォ、モニター)それらの間のフローを調整します。
2番目のバリアントでは、対話はメッセージ送信を使用して実行されます。シングルスレッドプロセスは、マルチプロセッサシステムの各プロセッサで開始され、メッセージを使用して他のプロセッサで実行されている他のプロセスと通信します。プロセスは、オペレーティングシステムの対応する関数を呼び出すことによって明示的に作成され、メッセージは、特別なライブラリ(MPIプロトコル実装など)または言語ツール(High Performance Fortran、Erlang、occamなど)を使用して交換されます。
上記の2つに加えて、ハイブリッドオプションも使用されます。分散メモリを備えたマルチプロセッサシステム(DM-MIMD)で、システムの各ノードが共有メモリを備えたマルチプロセッサ(SM-MIMD)である場合、次のアプローチを使用できます。マルチスレッドプロセスがシステムの各ノードで起動され、このノードのプロセッサ間でスレッドが分散されます。ノード上のスレッド間のデータ交換は共有メモリを介して実行され、ノード間のデータ交換はメッセージ転送を介して実行されます。この場合、プロセスの数はノードの数によって決定され、スレッドの数は各ノードのプロセッサの数によって決定されます。並列プログラミングのハイブリッド方式はより複雑ですが(並列プログラムを特別な方法で書き直す必要があります)、マルチプロセッサシステムの各ノードのハードウェアリソースを使用するのに最も効率的です。
この記事では、Pythonで計算を並列化するためにこのようなハイブリッドアプローチを採用することを提案します。この作業の重要な特徴は、docker-containerテクノロジーの使用です。開発中のフレームワークには、次の要素を含むクライアントサーバーアーキテクチャがあります。
クライアント側:
- シリアライザー:名前に従って、関数とその変数をシリアル化します(つまり、外部デバイスまたはネットワークに保存してから、同じノードまたは別のノードのメモリにロードできます)。また、さまざまな種類の関数にシリアライザーを使用できるようにするラッパー関数である並列デコレーターを強調する価値があります。
- サーバー/クラスター接続構成のクラス
- 並列化する関数をマークするための追加の言語機能。
サーバ側:
- デシリアライザー-それに応じて、受信したデータをデシリアライズします(上記を参照)。
- Executorは、逆シリアル化されたデータ(関数とその引数)を処理し、必要なライブラリをPythonインタープリターの仮想環境にインストールするクラスです。
開発中のシステムの一般的なアーキテクチャを図に示します。

クライアントとサーバー間の通信には、ソケットまたはツイストフレームワークを使用できます。これらの相互作用は、開発されたAPIを介して実行されます。
このシステムの実装は、dockerテクノロジーの使用を前提としています。これにより、便利で高速なソフトウェア構成を開始できます。docker-swarmクラスターを起動し、選択したサーバーにdockerイメージをデプロイして、レプリケーションの数を設定するだけです。
dockerテクノロジーを使用するその他の重要な利点は、UNIXのようなシステム(Ubuntu-軽量Alpine Linux)を仮想化することで同種のコンピューティング環境を作成できることと、スウォームモードが存在することです。これにより、異なるサーバーで複数のコンテナーを実行し、ジョブを無料のコンテナーに転送することで負荷をすばやく分散できます。 ..。
開発されたフレームワークは、機械学習や詳細なデータ分析タスクなど、Python言語で大量の計算を実行する必要があるさまざまな領域で使用できます。また、プログラミングコンテスト中の分散決定チェックなど、より単純なタスクにも使用できます。