• 締切済み

Javaで並列計算

並列計算クラスタの購入を勧められられています。 ところで、Javaで並列計算をやる方法ってあるのでしょうか?簡単でしょうか? 今のところ、シリアルの計算を複数流す、くらいしか使う方法が思いつかないのですが、並列計算がJavaで簡単に出来るのなら、ソースコードを作り直そうと思っています。 経験者の方か、知識がある方ががいらっしゃったらうれしいです。

みんなの回答

  • furyfox
  • ベストアンサー率56% (58/103)
回答No.3

>ということは、複数のスレッドを作ったソースコードを書けば、 >並列計算クラスタの各CPUに各スレッドが自動的に割り当てられる、ということでしょうか? MPUが活かされるかどうかはOSに依存するものです。 普通UNIXやWindowsServer系では、各スレッドの負担は分散するでしょう。 ただ、そこまでの処理速度を必用とするのでしたら その部分だけでもC++のインラインでも使った方が良いのではないでしょうか? 例えばCPUがPentium系ならMMXやSSE2命令を使うことにより、複数の計算を1処理で 可能になり、何万回も処理するような場所では大幅な速度向上が見込まれます。

white-tiger
質問者

補足

マルチタスクやマルチスレッドの話になってきてしまいましたが、私が知りたい質問はあくまで「並列計算クラスタ」のことです。 http://www.npac.syr.edu/users/yjchang/mpi/mpi.html をみると、MPI Java Wrapper とか出ています。 並列を使うためには、Javaでも単にスレッドを作るだけでなくて、MPIなどでCPUを明示的に指定する必要があるのでは、と思ったのですが、どうでしょうか?

  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.2

失礼しました。 >ということは、複数のスレッドを作ったソースコードを書けば、 >並列計算クラスタの各CPUに各スレッドが自動的に割り当てられる、ということでしょうか? うーん、それがよくわからないのです。 JVMがそこまで対応しているかどうか。 テストのため、ちょっと多くのスレッドを使うプログラムを書いてみて、 パフォーマンス計測をしてみたらどうでしょうか?

  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.1

並列計算クラスタというのは使ったことがないのですが…。 Javaでやろうとすると、計算をスレッドに分けるということになると思います。 Javaのスレッドは、簡単ではないですが、 困難という程ではなく、ちょっと調べれば可能です。 スレッドに分割してどの程度パフォーマンスが上がるかはわかりません。 JVMの実装などによると思います。 作成できるスレッドの数は、 シングルCPUでも(実験的に)2000作ることができたという報告があります。 スレッドは独自に動くだけではなく、スレッド間通信もできます。いくつかの方法があります。 ただし、スレッドを使う、あるいはスレッドを使って複雑なことをやると、 プログラムが複雑になり、バグの危険も増えます。 スレッドの使い方にはいくつかの作法があります。 Javaのスレッドだけを解説した本がいくつかあります。 そちらを参考にしてください。

white-tiger
質問者

補足

スレッドは知っていますし、プログラムしたこともあります。 ということは、複数のスレッドを作ったソースコードを書けば、並列計算クラスタの各CPUに各スレッドが自動的に割り当てられる、ということでしょうか? それなら並列用のコードを書く必要もなく、すごく楽です。

関連するQ&A