この記事の情報は古くなっています。
エントリー
遅かれ早かれ、Matlab / Simulinkパッケージのユーザーは、動作するコンピューターのパフォーマンスが不十分であるという問題に直面します。 私も直面しました。
最初に思いついたのは、鉄の近代化でした。 私は古いラップトップで作業しているので、固定PCについて考え始めました。 しかし、これは生産性の大幅な向上を約束するものではありませんでした。実際、これはゲーマーの手法であり、エンジニアの手法ではありません。
詳細はこちら>>
これが並列コンピューティングを使用した私の最初の経験であったという事実に基づいて、このトピックは初心者向けでもあります。 並列コンピューティングの専門家は、私の行動についての良いアドバイスやコメントに感謝します。
だから:
- 新しいコンピューター。
上で述べたように、快適な「科学的」作業には、多くの核プロセッサーと少なくとも1.3のcuda能力を持つグラフィックアクセラレーターを備えた「ゲーム」PCが必要でした。 高価でスケーラブルではありません。 私は彼の無制限の力を非常に迅速に習得するだろうと確信していました。 - モデルとコードの最適化/最小化/改良。
ラップトップの機能の限界に達する前に、私はすでにこの道を歩んできました。 状況をモデル化する時間が標準のコーヒー/ティー時間より長くなると、この方法は完全に使い果たされました。 「シミュレーションを開始して眠りにつくことができます!」と知っている人は言うでしょうが、このためには、すでに最適化されたモデルとそれがどのように振る舞うかの明確なアイデアが必要です。 また、開発の初期段階でパフォーマンスが必要でした。 - コンピューティングクラスターの使用。
手元にはクラスターはありませんでしたが、 天王星のようにノックするには長い時間がかかりました。 また、問題の記述は、サードパーティのリソースを使用するのにあまり適していませんでした。 タスクを一度実行して結果を収集する準備ができていませんでした。 これはまだ長い道のりでした。
その結果、小規模ではあるが
鉄の検索
私たちの世界での優勢を願って、同僚や知人に助けを求めました。 その結果、一部の人は私の実験のためにボランティアでPCを提供しました。 いくつかの選択肢がありましたが、私は2台の車を選択するだけでした。 理由を説明しようと思います:
- 各ボードにはコアi7プロセッサが搭載されていました。 4つのコアが2つの仮想を提供しました。 合計で、それらに基づいて16人の仮想ワーカーを作成する機会がありましたが、これは非常に良いことです。 さらに、動作メモリは1つの6 Gbと他の8 Gbにありました。
- これらは同じローカルネットワークに配置されていましたが、仮想ラボ間のデータ転送にかかる時間を最小限に抑えるために必要でした。 このネットワークに接続するために、VPNチャネルを上げ、各PCで作業するために、標準のリモートデスクトップをセットアップしました。
短所もありました:
- 私のラップトップにはx86オペレーティングシステムが搭載されていましたが、両方のPCでWindows 7 x64が実行されていました。 Matlabクラスターの必須要件の1つは、使用するオペレーティングシステムのビット深度が均一であることです。 その結果、ラップトップのプロセッサに基づいてクラスターにさらに2つのWORKERを追加する機会を失いました。
- ビデオカードのuda機能は1.3未満で、それらをまとめて含めることはできませんでした。
しかし、プラスがまだ重かったので、膝の上のクラスターの最初の石が置かれました。
クラスターを構築する
ソフトウェア要件
上記の鉄の要件を説明しました。 ソフトウェア要件は次のとおりです。
- すべてのマシンでMatlab。
プラットフォームなしで実行しないでください。 - 各マシンの分散コンピューティングツールボックス(DCT)。
- 各マシン上のMATLAB Distributed Computing Engine(MDCE)。
両方のツールボックスは一緒にのみ機能します。 - コンパイラは、標準のMatlabコンパイラとは異なります。
64ビットオペレーティングシステムを搭載したマシンで、それらをホストとして使用してSimulinkモデルをCコードにコンパイルする場合。 Matlabは、サポートされているコンパイラの長いリストを提供していますが、そのいくつかは無料です。 Microsoft Visual C ++ 2010を使用しました。 - アクティビティの種類に応じたSimulinkおよびその他の拡張機能。
クラスターの起動
まず、各マシンで、MDCEをサービスとしてインストールして実行する必要があります。 これは、Matlabを離れずに(「!」記号を使用してシステムコマンドとしてMatlabコマンドを実行する)、またはコマンドラインを使用して実行できます。 *このための.batファイルは、パス\ toolbox \ distcomp \ bin \に沿ってMatlabインストールディレクトリに関連して配置されます。
各マシンにMDCEをインストールして実行します。
cd('C:\Program Files\MATLAB\R2010b\toolbox\distcomp\bin\')
!mdce install
!mdce start
並列コンピューティングを管理するスケジューラーを開始します。
!startjobmanager -name jm -v
-vオプションは、Matlabコマンドウィンドウで起動プロセスを詳細に表示します。 スケジューラは、任意のPCでリモートで実行できます。
いわゆるワーカーのサイクルを開始します。ワーカーは、割り当てられたタスクを同時に実行します。
clientHost = 'slovak';
node = {'slovak', 'puls'};
for i = 1:length(node)
for j = 1:8
str = ['!startworker -name w_' num2str(j) '_' node{i} ' -jobmanagerhost ' clientHost ' -jobmanager jm -remotehost ' node{i} ' -v'];
eval(str)
end
end
「スロバキア」ホストは、スケジューラが実行されているコンピューターです。 私の場合、これは動作しているPCの1つです。 以前の名前はキリル文字であったため、名前を変更する必要がありましたが、Matlabはこれを許容しません。
!nodestatus -infolevel 3
ノードの詳細情報のための-infolevel 3オプション。
...
Job manager:
Name jm
Running on host Slovak
Number of workers 16
...
GUIを使用してクラスターを管理できます。 これを行うために、admincenter.batファイルはバッチファイルフォルダにあり、管理ユーティリティが起動します。 この場合、次のようになります。

記事を書いている時点で、PCは「衰退」しているため、管理センターには8人の労働者しかいません。
次に、Matlabを使用して作成されたスケジューラーを見つける必要があります。
jm = findResource('scheduler','type','jobmanager', ...
'LookupURL', 'slovak:27350', 'Name', 'jm');
この手順の後、リボンを厳重に切断し、クラスターが作成されて動作する準備ができていると自信を持って想定できます。 次に、ノード間で作業を正しく分散し、共有リソースへのアクセスを整理する必要があります。 また、この段階では、Matlabからのみ並列タスクを実行できることに注意してください。 Simulinkモデルを並列化するために、タンバリンと2回以上踊らなければなりませんでした。 その結果、特に並列ソリューションの利便性のために、すべての作業の概念を根本的に変更しましたが、これは別のトピックのトピックです。
このトピックに関する情報は、次のリソースから引用されました。
- Matlabウェブサイト
- Matlabユーザーブログ
- ロシア語ユーザーフォーラムMatlab
- N.N. オレネフ、R.V。 ペチェンキン、AM Chernetsov MATLABでの並列プログラミングとそのアプリケーションM .: VTs RAS、2007.120 p。
-
科学的な試行錯誤の方法
ご清聴ありがとうございました!
PS:行われたすべての作業は、Matlab R2010bのバージョンで実行されましたが、R2011aの新しいバージョンのdistcompフォルダーを一見しただけで、一見するとmathworksチームの作業は小さくありませんでした。 残念ながら、私自身はまだ新しいバージョンを所有していませんが、機会があり次第、私たちが提供できる技術革新を強調するつもりです。 現在は、マイクロコントローラ用のSimulinkモデルからCコードを生成するのに忙しくしています。