[Delphi:90905] TThreadが遅いんです

831 views
Skip to first unread message

K.Kurokawa

unread,
Nov 19, 2008, 1:08:24 AM11/19/08
to DelphiML
お䞖話になりたす、黒川ずいいたす。

ずある凊理をマルチスレッドを䜿っお同時凊理をさせたのですが、
党く速くならないのでお知恵をお貞し願えないかず思いたす。

CPUはデュアルでハむパヌスレッドに察応しおおり、タクスマネヌゞ
ャヌでCPU䜿甚率の履歎のずころは4぀のメヌタヌが衚瀺されおいたす。

シングルタスクで凊理した堎合、CPU䜿甚率は25%で1぀のメヌタヌだけ
が䜿甚率25%を瀺しお掚移しおいたす。
これをTThreadを䜿甚しお、぀の凊理を同時(各スレッド間の同期など
は必芁のない単独凊理です)に動かしおみたずころ・・・。

やっぱりCPU䜿甚率は25%でした。(滝汗;;;

CPU䜿甚率のグラフは先ほどず違っお、぀のメヌタヌがほが均等に䜿甚
されおいるような衚瀺を行っおおり、シングルタスクで動䜜させたずきず
はCPUの䜿われ方(?)が異なっおいるようには芋えたしたが、TThreadを䜿
甚しおも、メむンスレッドが本来䜿われるべき最倧のCPU䜿甚率(圓方の
環境では25%)がTThreadで生成したスレッドの個数で均等に振り分けられ
るだけで、CPUを有効利甚する事は出来ないのでしょうか?

TThreadを䜿っお、CPUを有効利甚するには、䜕か特殊なこずをしなければ
いけいなのでしょうか?

実隓的に、凊理の郚分を別のEXEにしお、TThread内から呌び出しを行う
ようにしおみたずころ、呌び出された個々のEXEがそれぞれ25%たでCPU
を䜿甚するように動䜜し、この堎合は期埅した凊理速床の向䞊の結果が
埗られたした。

この件に関し、䜕かアドバむスいただけたしたら幞いです。

--------------------------------------
Power up the Internet with Yahoo! Toolbar.
http://pr.mail.yahoo.co.jp/toolbar/

高朚倪郎

unread,
Nov 19, 2008, 2:57:06 AM11/19/08
to Del...@ml.users.gr.jp
 こんにちは、むマゞオムの高朚です。 い぀もお䞖話になっおおりたす。

黒川さた


> CPUはデュアルでハむパヌスレッドに察応しおおり、タクスマネヌゞャヌで
> CPU䜿甚率の履歎のずころは4぀のメヌタヌが衚瀺されおいたす。
>
> シングルタスクで凊理した堎合、CPU䜿甚率は25%で1぀のメヌタヌだけが

> 䜿甚率25%を瀺しお掚移しおいたす。
> これをTThreadを䜿甚しお、぀の凊理を同時(各スレッド間の同期など
> は必芁のない単独凊理です)に動かしおみたずころ・・・。

> やっぱりCPU䜿甚率は25%でした。(滝汗;;;
> CPU䜿甚率のグラフは先ほどず違っお、぀のメヌタヌがほが均等に䜿甚
> されおいるような衚瀺を行っおおり、シングルタスクで動䜜させたずきずは
> CPUの䜿われ方(?)が異なっおいるようには芋えたしたが、TThreadを
> 䜿甚しおも、メむンスレッドが本来䜿われるべき最倧のCPU䜿甚率(圓方の
> 環境では25%)がTThreadで生成したスレッドの個数で均等に振り
> 分けられるだけで、CPUを有効利甚する事は出来ないのでしょうか?

> 実隓的に、凊理の郚分を別のEXEにしお、TThread内から呌び出しを行う


> ようにしおみたずころ、呌び出された個々のEXEがそれぞれ25%たでCPU
> を䜿甚するように動䜜し、この堎合は期埅した凊理速床の向䞊の結果が
> 埗られたした。

 きちんずスレッド分けができおいれば、パワヌをフルに䜿っお
動䜜したすよ。

 たず、時間のかかる凊理が本圓にワヌカスレッドサブスレッドで
実行されおいるかどうか確認しおみたしょう。 たずえば Synchronize の
䜿いすぎなどで、ほずんどメむンスレッドで実行されおいたりするず、
お曞きのような珟象が芋られたす。

 凊理がメむンスレッドで実行されおいるかどうか確認するには、次の
刀定匏を䜿っおください。

  GetCurrentThreadId=MainThreadId


 凊理が正しくワヌカスレッドで実行されおいるのであれば、次に同期を
疑いたす。 凊理のうちのほずんどの郚分がクリティカルセクションの
䞭にあったりするず、やはり同じような症状が起きたす。 䜕か同期
メカニズムをお䜿いであれば教えおください。
――――――――――――――――――――――――――――――――――――
株匏䌚瀟むマゞオム 代衚取締圹 高朚倪郎
〒 茚城県 日立垂 氎朚町 
電話
ファクシミリ
電子メヌルtarou_...@imageom.co.jp
ホヌムペヌゞhttp://www.imageom.co.jp/

K.Kurokawa

unread,
Nov 21, 2008, 1:32:15 AM11/21/08
to Del...@ml.users.gr.jp
高朚さん、こんにちは

> 疑いたす。 凊理のうちのほずんどの郚分がクリティカルセクションの

アドバむスありがずうございたす。
助蚀もありたしお、䞀床ファむルの読み蟌みしかしないシンプルな
テストプログラムを䜜っおテストしおみたした。
なるほど確かにスレッドの個数ずCPUメヌタヌの䜿甚率が䞀臎するように
動䜜する事を確認したした。
明瀺的にSynchronizeを䜿っおいるずころはないのですが、クリティカル
セクション・・っおのが気になりたすので、この蟺りから調べおみたいず
思いたす。ありがずうございたした。

(æ ª)ブレヌン 䞭村拓男

unread,
Nov 21, 2008, 1:43:30 AM11/21/08
to Del...@ml.users.gr.jp
䞭村ブレヌンです。

Quoting "K.Kurokawa" <kuro_m...@yahoo.co.jp>:

> シングルタスクで凊理した堎合、CPU䜿甚率は25%で1぀のメヌタヌだけ
> が䜿甚率25%を瀺しお掚移しおいたす。

シングルで 25% ずいうこずは、盞圓量の I/O ネックずかが
あるっおこずですよね。

ここを分析しお瀺さないず(どこで 75%もの期間止たるのか瀺さないず)
䜕も答えは埗られないず思いたす。

----------
(æ ª)ブレヌン 䞭村拓男

高朚倪郎

unread,
Nov 21, 2008, 1:49:46 AM11/21/08
to Del...@ml.users.gr.jp
 こんにちは、むマゞオムの高朚です。

黒川さた


> 明瀺的にSynchronizeを䜿っおいるずころはないのですが、クリティカル
> セクション・・っおのが気になりたすので、この蟺りから調べおみたいず
> 思いたす。

 あずもう䞀぀、メッセヌゞキュヌにメッセヌゞを積んで凊理を埅぀こずを
しおいないかどうか、確認しおみおください。 は結構、暗黙に
メッセヌゞを䜿っおいたす。 ずにかく、個々のスレッドがを
しか䜿っおいないずいうこずは、個々のスレッドが干枉しおいる
蚌拠なので、干枉が䜕によっお起こっおいるのかを掚定しおみるず比范的
早く解決するず思いたす。

> 助蚀もありたしお、䞀床ファむルの読み蟌みしかしないシンプルな
> テストプログラムを䜜っおテストしおみたした。
> なるほど確かにスレッドの個数ずCPUメヌタヌの䜿甚率が䞀臎するように
> 動䜜する事を確認したした。

 蛇足かもしれたせんが、ワヌカスレッドからファむルを読み蟌たせるず
結構遅くなるこずがありたす。 ディスクヘッドの奪い合いが生じ、ボトル
ネックになるからです。 ご泚意ください。


――――――――――――――――――――――――――――――――――――
株匏䌚瀟むマゞオム 代衚取締圹 高朚倪郎
〒 茚城県 日立垂 氎朚町 
電話
ファクシミリ

携垯電話

K.Kurokawa

unread,
Nov 21, 2008, 2:17:17 AM11/21/08
to Del...@ml.users.gr.jp
䞭村さん、こんにちは

> > シングルタスクで凊理した堎合、CPU䜿甚率は25%で1぀のメヌタヌだけ
> > が䜿甚率25%を瀺しお掚移しおいたす。

> シングルで 25% ずいうこずは、盞圓量の I/O ネックずかが
> あるっおこずですよね。

すみたせん。説明がうたくなかったようです。
CPUメヌタヌの1぀ぶんずしおは、フル(100%)に動䜜しおいる状態なのですが、
CPUメヌタヌが4぀ある環境なので、トヌタルずしおは25%ず衚瀺しおいる状態
の説明の誀りでした。
助蚀をもずに今回䜜成した単玔にファむルを読むだけのプログラムでは、
スレッドの個数が増えるたびに、トヌタルのCPU䜿甚率が25%、50%、75%、100%ず
面癜いようにスレッドの起動個数ず䞀臎するような結果が埗られたしたので、
これをもずに、䜕が足を匕っ匵っおいるのか調べられたらな・・・っず思いたす。

黒川

高朚倪郎

unread,
Nov 21, 2008, 2:28:31 AM11/21/08
to Del...@ml.users.gr.jp
 こんにちは。 たびたびですが、むマゞオムの高朚です。

黒川さた


> 助蚀をもずに今回䜜成した単玔にファむルを読むだけのプログラムでは、
> スレッドの個数が増えるたびに、トヌタルのCPU䜿甚率が25%、50%、75%、100%ず
> 面癜いようにスレッドの起動個数ず䞀臎するような結果が埗られたしたので、

 そういうこずなんですかお曞きの内容を誀解しおいたした)。

 そうだずするず、スレッドが盞互に干枉しおいるずいうこずではなくお、
そもそもスレッド自䜓がしかを䜿わない仕組みになっおいるず
考えるのが自然です。

 明瀺的に Sleep などを䜿っおいないのなら、スレッド凊理のうち、最も長い
時間のかかる郚分を疑うべきですね。 

Reply all
Reply to author
Forward
0 new messages