- 締切済み
Javaで並列計算
並列計算クラスタの購入を勧められられています。 ところで、Javaで並列計算をやる方法ってあるのでしょうか?簡単でしょうか? 今のところ、シリアルの計算を複数流す、くらいしか使う方法が思いつかないのですが、並列計算がJavaで簡単に出来るのなら、ソースコードを作り直そうと思っています。 経験者の方か、知識がある方ががいらっしゃったらうれしいです。
- white-tiger
- お礼率43% (1031/2391)
- Java
- 回答数3
- ありがとう数0
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- furyfox
- ベストアンサー率56% (58/103)
>ということは、複数のスレッドを作ったソースコードを書けば、 >並列計算クラスタの各CPUに各スレッドが自動的に割り当てられる、ということでしょうか? MPUが活かされるかどうかはOSに依存するものです。 普通UNIXやWindowsServer系では、各スレッドの負担は分散するでしょう。 ただ、そこまでの処理速度を必用とするのでしたら その部分だけでもC++のインラインでも使った方が良いのではないでしょうか? 例えばCPUがPentium系ならMMXやSSE2命令を使うことにより、複数の計算を1処理で 可能になり、何万回も処理するような場所では大幅な速度向上が見込まれます。
- liar_adan
- ベストアンサー率48% (730/1515)
失礼しました。 >ということは、複数のスレッドを作ったソースコードを書けば、 >並列計算クラスタの各CPUに各スレッドが自動的に割り当てられる、ということでしょうか? うーん、それがよくわからないのです。 JVMがそこまで対応しているかどうか。 テストのため、ちょっと多くのスレッドを使うプログラムを書いてみて、 パフォーマンス計測をしてみたらどうでしょうか?
- liar_adan
- ベストアンサー率48% (730/1515)
並列計算クラスタというのは使ったことがないのですが…。 Javaでやろうとすると、計算をスレッドに分けるということになると思います。 Javaのスレッドは、簡単ではないですが、 困難という程ではなく、ちょっと調べれば可能です。 スレッドに分割してどの程度パフォーマンスが上がるかはわかりません。 JVMの実装などによると思います。 作成できるスレッドの数は、 シングルCPUでも(実験的に)2000作ることができたという報告があります。 スレッドは独自に動くだけではなく、スレッド間通信もできます。いくつかの方法があります。 ただし、スレッドを使う、あるいはスレッドを使って複雑なことをやると、 プログラムが複雑になり、バグの危険も増えます。 スレッドの使い方にはいくつかの作法があります。 Javaのスレッドだけを解説した本がいくつかあります。 そちらを参考にしてください。
補足
スレッドは知っていますし、プログラムしたこともあります。 ということは、複数のスレッドを作ったソースコードを書けば、並列計算クラスタの各CPUに各スレッドが自動的に割り当てられる、ということでしょうか? それなら並列用のコードを書く必要もなく、すごく楽です。
関連するQ&A
- 並列計算について
あまりパソコンに詳しい方ではありません。 今、linuxが入ったパソコン(CPU:Intel(R)Core(TM)i7 CPU970@3.20GHz,コア数12, メモリ:5.8GiB)で数値計算をしています。コンパイラはgfortranです。OpenMPを使って、並列計算をしています。 例えば、スレッドを5使って一つのプログラムの計算したとします。次に別のプログラムをスレッドを5使って同時に計算したとします。 CPUモニタで確認すると、合計12スレッド中、10スレッドが使用率100%になります。 しかし、計算時間はそれぞれ倍ぐらいになってしまいます。結局、プログラムを1 つずつ計算するのと同じ時間がかかります。また、使用するスレッドは5ぐらいが最適であることがわかっています。(それ以上多くしても計算時間が多くなるだけ)。つまり、12スレッド中7スレッドは常に仕事をしていません。 原因、及び解決方法はあるでしょうか?
- ベストアンサー
- その他(プログラミング・開発)
- Webから得るJAVAプログラム
わたしの入手した「JAVAプログラング技法」(堀内泰輔訳)に、「逆アセンブラ(javap)は、ソースコードが入手できないコンパイル済みのJavaプログラム(例えば読者がWebから得るJavaプログラム)を、元のソースコードに戻すための手ごろなツールです。」(24頁)と説明されています。WebからJavaプログラム(のバイトコード)を得る方法を教えて戴けないでしょうか。
- 締切済み
- Java
- Intel+WindowsPCの並列化処理
いまどきのPCですが、Core-i5, メモリ4G, 64ビットにintel Visual Fortran11.1.048をインストールし、コマンドプロンプトにコマンドを入力しながら利用しています。 このような状況でもCPUの分割による並列計算ができると思っています。 自分のプログラム(流体計算系)を以下のようにしてコンパイル、実行してみました。 ifort /Qparallel abc.f↓ abc.exe <ret>↓ 一応、トコトコと最後まで走っていきますが、コンパイラオプション /Qparallelをつけずにコンパイルした場合と速度はほぼ変わりません(同じと言ってもいいぐらい)。自分が何か間違っているか、並列処理では効率が上がりにくいつくりになっているのかわかりませんが。ただ、このコンパイラオプションは自動並列化で、ソースの作り方が少々悪くても対応するのではないかと思っています。 (悪いのは悪いのなりに、比率の比較はできるだろうと思うのですが) また、コンパイラオプションですが、いろんなサイトを見ると、-parallel となっている場合が多いですが、ifort -helpでオプションを調べると、/Qparallel と表示されます、これでいいでしょうか。 もう1つお願いなのですが、フォートランのプログラムで並列化オプションの有無ではっきりパフォーマンスの違いがわかる簡単なサンプルコードがないでしょうか。ラプラス方程式とかポアソンソルバーとか割とソース事態は短くて、並列効果が顕著なコードですが。ネットで見るとあることはありますが、C言語だったりします。 自分で作ると、あまり効果がわからないので、これぞ、並列効果というのがわかるとありがたいです。 また、それによって、自分の環境ががんばり次第で並列化で高速化できるという自信にもなります。 (今効果が出ないのは、ひょっとしたら並列環境のインストールにミスがあるのではないか、私が何か勘違いしているのではないかと疑いもあるからです。) 並列化の処理速度以外でこのコンパイラの動作に異常はないようです。 以上、よろしくお願いします。
- 締切済み
- その他(プログラミング・開発)
- JavaのGPU演算方法
お世話になります。 JavaでGPUを用いた並列計算を考えています。 ニューラルネットワークの実装で、while文で更新処理を実行します。 そこで質問ですが、GPUを用いた並列演算では、while文を一度に複数処理できるという認識でよいでしょうか。 また、これを実装するには、Aparapiを使えばいいのかなと思うのですが、具体的にどう実装すればよいかわかりません。 以上、2点の質問に関してご回答のほどお願い致します。
- ベストアンサー
- Java
- javaインストールにつきまして
質問させていただきます.どうぞよろしくお願いいたします. 環境:Win7 64bit になります。 今ネットから落としてきたjavaのソースコードファイル(.java)を コンパイルしてみたいのですが、CとVB(両方共ちょっとだけです)しか 経験がなく、やり方が分かりません。。 検索しておりまして、 http://java.sun.com/j2se/1.5.0/ja/download.html のどれかをDLする(?)のかなと思うのですが、 試しに「JDK 5.0 Update 22」を DL→インストール→再起動といたしまして、 CMDで「java sample.java」や「javac sample.java」と打ちましても 「’java’は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 と表示されてしまいます。 もしお詳しい方がいらっしゃいましたら,お教えいただきたく どうぞよろしくお願いいたします。
- ベストアンサー
- Java
- java debug するとき
JAVA初心者です。いまはLINUX上でJAVAを使って開発していますが、EMACSでソースコードを書いて、COMPILEして、WARNINGがでるので、何か良いDEBUGツールがあれば、教えてください。
- 締切済み
- Java
- Javaの種類ってどんだけあるの?
はじめまして、現在休職中で今後、仕事で役立てられたらと考えてJavaを勉強しようと、考えているもんです。むろん、仕事はコンピュータ関連でもありませんし、 ソースコードも書いたことございません。 Java Application、Java applet、i-Appliなるものは分かりましたが、 Java servlet、etc...と書店を回っただけでもたくさんあり、どういうものが Javaにはあるのかを詳しく知りたくなりました。 ご存知の方がおられましたらどういう場面で使うのか、もしくはどのような用途にむくのかということを教えてください。 よろしくお願いします。
- ベストアンサー
- Java
補足
マルチタスクやマルチスレッドの話になってきてしまいましたが、私が知りたい質問はあくまで「並列計算クラスタ」のことです。 http://www.npac.syr.edu/users/yjchang/mpi/mpi.html をみると、MPI Java Wrapper とか出ています。 並列を使うためには、Javaでも単にスレッドを作るだけでなくて、MPIなどでCPUを明示的に指定する必要があるのでは、と思ったのですが、どうでしょうか?