並列コンピューティングの言語としてのJava。 インストール、セットアップ、最初のプログラム

こんにちは



HPCでの一定期間、Javaで並列プログラムを書いている人を見たことはありません。 彼はCで何かを書き、Fortranを見ましたが、魂は常にJavaに引き寄せられました。 最後に、彼は座ってそれを理解しようとしました。



内容:

1)Java用MPIの実装。 これは何ですか 入手先

2)これをすべてインストールする方法は? 設定方法

3)最も簡単なプログラムを書きましょう。 実行方法





並列技術の概要については、以前の投稿を参照しください。



1)Java用MPIの実装。 これは何ですか 入手先



Java MPI実装の場合、筆者がすでに知っている限りではmpiJavaと、mpiJavaと他の有能な開発者をチームに持っているMPJ Expressの 2つがあります。 実装は、NIOとMyrinetの2つのテクノロジーをネイティブにサポートします。 Myrinetは手元になかったため、NIOでテストされました。 実装はMPICHのように機能します。相互に通信するデーモンプロセスは適切なノードで作成されます。



実装サイト 。 かなり不十分で、十分な例ではありません。



2)これをすべてインストールする方法は? 設定方法



行こう プラットフォーム:4ノードのSuSe 10.3 64ビット。 Java HotSpot(TM)64ビットサーバーVM(ビルド1.5.0_16-b02、混合モード)。



// 0.35バージョンをダウンロードします。これは、0.36がまだ十分に動作しておらず、//開発者との3日間の通信が発生する不具合があるためです。 重要:同じバージョンのJVMをすべての//ノードにインストールする必要があります!



wget " sourceforge.net/projects/mpjexpress/files/releases/mpj-v0_35.tar.gz/download "

tar xvf mpj-v0_35.tar.gz

cd mpj-v0_35

ant(antがインストールされていない場合は、インストールする必要があります)





MPJ Expressフォルダーをすべてのノードで何らかの方法で共有し、同じパスに手動で配置する必要がないようにするのが最適です。



今、あなたは道を修正する必要があります。 ZSHを使用していますが、ファイル名のみがBashと異なります。

以下を/ etc / zshenvファイルに追加する必要があります。

エクスポートJAVA_HOME = java_path

export MPJ_HOME = path_to_MPJ

export PATH = $ PATH:$ MPJ_HOME / bin





/.zshrcでは機能しません。SSHコマンドの実行時にパスが発行される必要があります。

もちろん、これを行うには、すべてのノードで必要です。



便宜上、最も必要なライブラリ(/path_to_mpj/lib/mpj.jar)を/ ext / libに配置します。 すべてのノードで!



悪魔を実行しようとすることができます。 必要なノードを指定するマシンファイルを作成します。

ノード1

ノード-2

ノード-3



そして/ path_to_mpj / bin / mpjbootマシン-デーモンを実行します。 ここでパフォーマンスを確認できます-* .pidファイルが作成された場合(各デーモンに1つ)、すべてが正常です。 数秒後に作成して消えた場合は、JVMに問題があることを意味します。 作成されていません-JVMはまったくありません。 :-)コンソールキーを使用してmpjdaemon_linux_x86_64ビンにあるユーティリティを使用すると、すべての問題を診断できます。



できた



3)最も簡単なプログラムを書きましょう。 実行方法



プログラムは決して簡単ではありません。

import mpi.*; public class HelloWorld { public static void main(String args[]) throws Exception { MPI.Init(args); int me = MPI.COMM_WORLD.Rank(); int size = MPI.COMM_WORLD.Size(); System.out.println("Hello world from <"+me+"> from <"+size); MPI.Finalize(); } }
      
      







説明:

並列セクション(.Init)を初期化し、2つのプリミティブmeとサイズ(ノードの識別子とプール内のノードの数)を作成し、「Hello world!」を表示して、並列セクションを閉じます。



それだけです 成果があります-私は共有します。 それまでの間、この投稿は誰かに興味を持ち、より大きな成果を求めているかもしれません。






All Articles