Google グループは Usenet の新規の投稿と購読のサポートを終了しました。過去のコンテンツは引き続き閲覧できます。
表示しない

Scalable multithreaded programs in Java

閲覧: 8 回
最初の未読メッセージにスキップ

Yasushi Shinjo

未読、
2004/01/08 13:38:492004/01/08
To:
新城@筑波大学情報です。こんにちは。

Java でマルチスレッドのプログラムを書いて共有メモリのマルチ
プロセッサで動かそうとしています。VM で使える CPU の数を変え
ながら台数効果を調べたいのですが、なかなかうまくいきません。
何かノウハウはないでしょうか。

試したのは、pthread_setconcurrency() (thr_setconcurrency())
を、JNI で呼び出してみたことです。一応、設定はうまくいきます。
pthread_getconcurrency() してみると、ちゃんと設定した通りに
なっています。しかし、実際には台数効果は図れません。

負荷としては、単にループをぐるぐる回るようなものを使っています。

環境は、こんな感じです。

Hardware: Sun Enterprise E4500, UltraSPARC II 366 MHz x 6
OS: SunOS 5.6 (Solaris 6)
Java: java version "1.4.2_03"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_03-b02)
Java HotSpot(TM) Client VM (build 1.4.2_03-b02, mixed mode)

次のページの -XX:+UseBoundThreads は試してみました。
pthread_self() するとたしかに Java のスレッドと pthread は対
応しているように見えます。

http://java.sun.com/docs/hotspot/threads/threads.html

続きは、Followup-To: fj.comp.lang.java ということで、よろし
くお願いします。

HotSpot 止めればいいのかなあ。どうしたら止まるんでしたっけ?

\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 電子・情報       \\

Shinji KONO

未読、
2004/01/08 20:03:062004/01/08
To:
河野真治 @ 琉球大学情報工学です。

In article <YAS.04Ja...@kirk.is.tsukuba.ac.jp>, y...@is.tsukuba.ac.jp (Yasushi Shinjo) writes


> Hardware: Sun Enterprise E4500, UltraSPARC II 366 MHz x 6
> OS: SunOS 5.6 (Solaris 6)

5.6 だと、pthread に複数のCPUを割り当てるためにはおまじないが
必要だったと思います。

(が、なんだったか思い出せん.... 5.8 だとデフォルトで複数割り当てられる
みたい...)

---
Shinji KONO @ Information Engineering, University of the Ryukyus,
河野真治 @ 琉球大学工学部情報工学科,

Yasushi Shinjo

未読、
2004/01/09 2:49:172004/01/09
To:
新城@筑波大学情報です。こんにちは。

In article <3989330...@insigna.ie.u-ryukyu.ac.jp>


ko...@ie.u-ryukyu.ac.jp (Shinji KONO) writes:
> 5.6 だと、pthread に複数のCPUを割り当てるためにはおまじないが
> 必要だったと思います。

正確には、5.6 だと pthread_setconcurrency() ではなくて
Solaris Thread の thr_setconcurrency() を使っています。

thr_setconcurrency() と Pthread を混ぜて使っても、うまく行く
のは確認しています。setconcurrency() は、カーネル・レベルの
スレッドの数、つまり、Solaris の Lightweight Process (LWP)
の数を調整するものなんでしょう。

Shinji KONO

未読、
2004/01/09 4:43:242004/01/09
To:
河野真治 @ 琉球大学情報工学です。

In article <YAS.04Ja...@kirk.is.tsukuba.ac.jp>, y...@is.tsukuba.ac.jp (Yasushi Shinjo) writes

> thr_setconcurrency() と Pthread を混ぜて使っても、うまく行く
> のは確認しています。setconcurrency() は、カーネル・レベルの
> スレッドの数、つまり、Solaris の Lightweight Process (LWP)
> の数を調整するものなんでしょう。

pthread は thread を使って実現されているようなのでそれは
正しいんですが...

pbind とか psrset とかいうコマンドでprocessor をrpocess
に割り当てるってのがあったみたい。

Yasushi Shinjo

未読、
2004/01/09 16:46:542004/01/09
To:
新城@筑波大学です。こんにちは。

In article <3989340...@insigna.ie.u-ryukyu.ac.jp>


ko...@ie.u-ryukyu.ac.jp (Shinji KONO) writes:
> pbind とか psrset とかいうコマンドでprocessor をrpocess
> に割り当てるってのがあったみたい。

たしかに pbind というコマンドはあります。これで LWP とCPU の
対応関係を固定できます。しかし、それは別に固定しても動的でも
どうでもいいんです。総数として合計2個なら2個、4個なら4個
働いてくれれば。

pthread_setconcurrency() (thr_setconcurrency()) だけでC のプ
ログラムだけなら、意図した通りに CPU の総数を調整できて、CPU
の数に応じた性能が出ます。pbind しなくても。

Java のプログラムでも同じことがしたいのですが、なかなかうま
くいかないわけです。

OGAWA KenIchi

未読、
2004/01/11 1:58:402004/01/11
To:
小川と申します。

Yasushi Shinjoさんの記事<YAS.04Ja...@kirk.is.tsukuba.ac.jp>から引用します:

> HotSpot 止めればいいのかなあ。どうしたら止まるんでしたっけ?

HotSpot は、java コマンドの -Xint オプションを利用すれば無効にできると
思います。

参考:
http://java.sun.com/j2se/1.4/ja/docs/ja/tooldocs/solaris/java.html#nonstandard

--
小川建一 mailto:ken...@ice.email.ne.jp
++

新着メール 0 件