Ognacの雑感

木漏れ日々

目次

Blog 利用状況

書庫

ギャラリ

マルチスレッドの出番?

前回、マルチコアCPUの事をかいたのですが、一部の記事で、マルチスレッドで盛り上がっているようです。
http://blogs.wankuma.com/episteme/archive/2009/09/17/181351.aspx

 元記事によると、マルチスレッド/コアCPUでの開発は「Parallel Inspector」 を使えば、言語はC/C++に限定されるらしいが、効率よく開発できるらしい。
私の知識不足の為なんですが、よく解りませんでした。メリットが見えない。
 確かに、マルチスレッドのコーディングはできそうです。でも、「それがどうしたの」というのが感想です。
マルチコア・スレッドは新テクノロジーではなく、随分以前からあるテクノロジーです。いまさら開発スタイルが変わるものではありません。
従来から有る手法なのに、アプリプログラムでメジャーにならないのは、必要とする分野が限られているからでしょうね。
(一般的にアプリでは)そもそも、複数コアのバランスを調整するのはOSの仕事であって、事務アプリが考慮することではありません。
アプリで考慮せよというのでは、開発の単純化の流れに逆行しますし現場が混乱するだけです。ましてや開発スタイルが変わってはいけません。
OSが割り振るスケジュールを差し置いて、アプリか実行コアに任意に指定すると、バランスが狂って逆に悪化する可能性もあります。結構調整が難しいようです。
 Windowsアプリも過去の蓄積が多くなっているので、過去の資産の継承も大きな要素となっています。過去の仕様を否定してまで新仕様を普及させるのは、難しくなっていると思います。
新テクノロジの提供は、SilverlightやWPFなどにように新パラダイムの提供といった形になるのでしょうね。

画像や音声の加工処理などはメリットが大きいです。でもRDBアプリはシリアルATAやUSBが全盛なので、外部DISKをマルチスレッド/タスクで使うとQueue処理同期がコスト高になりそうだし。SCSIに戻ることはないだろうし。トラフィック限界もあるし。
事務アプリでマルチスレッドの出番ってあるのだろうか、パラレルクエリーは、RDB上の処理なので、アプリシナリオとは別次元の話ですよね。
実行中の処理中断などは、現行でも行っているし。
科学計算でも、手順は手続き型が多いので、処理を分散させて、結果を同期で取得する仕組みをつくって、同期コストを掛けるより、シングルスレッドで行ったほうがシンプルだろうし。

CPUのクロックアップは限界のようで、流れはマルチコアになってますが、シングルスレッドの実行速度はこれ以上大幅なアップしないのだろうか。パイプ段数の増加も限界がありそうだし。
RISC系CPUが復権するのだろうか...

投稿日時 : 2009年9月18日 0:04

Feedback

# re: マルチスレッドの出番? 2009/09/18 2:00 aetos

> シングルスレッドの実行速度はこれ以上大幅なアップしないのだろうか。

そんなことはないと思います。

シングルコアの性能が上がらなくなったのは、トランジスタのリーク電流が大きくなりすぎて、電力効率が悪く、発熱が大きくなってきたためです。
そこで、根本的にはトランジスタのリーク電流を下げる必要があるわけですが、そのための技術がそろそろ実るんじゃないかと思ってます。

2002年~2003年にかけてこういうニュースがありました。
http://pc.watch.impress.co.jp/docs/2002/0919/intel2.htm
http://pc.watch.impress.co.jp/docs/2003/0212/kaigai01.htm
2010年ごろの実用化を目指して研究中と聞いたきり、続報がぱたりと聞こえてこなくなってしまったのですが、当初の目論見どおりに研究が進んでいれば、そろそろ日の目を見るのかなぁと。

# re: マルチスレッドの出番? 2009/09/18 8:34 774RR

> でもRDBアプリはシリアルATAやUSBが全盛なので、(r
関連がよくわかんないです。
SAS なんてまるっきり SATA ですし・・・

# re: マルチスレッドの出番? 2009/09/18 8:54 なちゃ

マルチスレッドは何も目新しいことはありませんが、
コンシューマレベルまで多コアが浸透してくると、
アプリケーション開発のパラダイムは一般レベルでも大きく変わるでしょう。
当分は限られた分野だとしても。

あと、OSのスケジューラを差し置いてとかそういう問題じゃないです。
そんなことしようとしてるんじゃないでしょう。

# re: マルチスレッドの出番? 2009/09/18 9:51 biac

> 事務アプリでマルチスレッドの出番ってあるのだろうか

あったりして f(^^;

ADO.NET, LINQ to SQL, Entity Framework… データベースからメモリ上にどど~んとデータを引っ張ってきて、 クライアントのメモリ上でガチャガチャやる方向になってきてますよね。
# ちまちま取ってくることもできるけど、それこそエンティティ (1レコード) ごとに取得したりすると、 DB へのクエリ回数が増えて、 処理全体としては遅くなってしまう。

32bit Windows でも、アプリケーションで 1GB くらいは平気で使えるし、 今後 64bit になっていったら、 使えるメモリはさらに増えるわけで。 業務アプリの造りはますますクライアント側のメモリ上での処理が多くなりそうです。

で。 そんな造りにすると、CPU の利用率が平気で 100% に張り付いたりするんですよ。 実際、 この春までやってた開発では、 そんな状態に。
タスクマネージャの CPU グラフが 4つ並んでて、 ひとつだけ振り切ってるのを見ると、 「もったいない」 って溜め息が出ちゃいます f(^^;

# I/O がボトルネックになってる状態なのにマルチスレッド化するってことなら、 それはもちろん馬鹿げてると思いますけど。 f(^^;

# re: マルチスレッドの出番? 2009/09/18 10:00 επιστημη

> ひとつだけ振り切ってるのを見ると、 「もったいない」

要は↑コレじゃないかなー

ふつーの(なにが"ふつー"かはさておき)アプリでマルチスレッドが有効に働くシチュエーションはそう多くないかも知れん。

けどもたとえばフーリエ変換(画像/信号処理)。
あるいはたとえば行列演算(マルコフ連鎖とか連立方程式解かすとか)。
空いてるコア総動員してくれたら速いよー♪

# re: マルチスレッドの出番? 2009/09/18 10:22 えムナウ

.NET でもマルチコアやマルチスレッドは古くからサポートされています。
しかし、今までは手軽さがなかった。

マルチコアやマルチスレッドの排他や資源調整などの概念は一握りの人たちのものだったわけです。

BackgroundWokerやPLINQやSystem.Threading.Parallel クラスなど使い方が分かれば必要な人は手軽に使えます。

# re: マルチスレッドの出番? 2009/09/18 10:29 なちゃ

この、空いてるコアを総動員ってところを、
アプリケーション側が出来るだけ低レベルには意識せずに、
うまくやる方法を提供するってのが、これから重要になってくる
開発ツールやライブラリや開発パラダイムです。
まあ、件の記事がそういう観点で書いてるかは別問題だとしても。

# re: マルチスレッドの出番? 2009/09/18 19:29 ognac

>2010年ごろの実用化を目指して研究中と聞いたきり、(略)
どうなっているのでしょうね。目処が立っているのか否かも解らない。期待はしているのでが。当分は無理な様子ですね。

>でもRDBアプリはシリアルATAやUSBが全盛なので、(r
「CPUがマルチ動作しても、 ATA/USBの伝送特性がネックになって、データ転送がマルチ処理に対応するのは難しいのでは」と思うのです。

>あと、OSのスケジューラを差し置いてとかそういう問題じゃないです。
用語使用を間違ってましたね。多コアの処理配分の意味で使ったのですが、スケジューラでは別の意味になっちゃう。失礼しました。

>業務アプリの造りはますますクライアント側のメモリ上での処理が多くなりそうです。
安易に出来ちゃうと、Webアプリでも、同様の手法にする輩が出てきて、Web.Serveがバンクする....ありそうですね。

> I/O がボトルネックになってる状態なのにマルチスレッド化するってことなら、(略)
問題検討の課題が別次元で発生するのは確実ですね。1つだけが100%になるのを、どうみるか、心情的な部分もありそうですね。

>けどもたとえばフーリエ変換(画像/信号処理)。 (略) 空いてるコア総動員してくれたら速いよー♪
今は、リアルでFFT結果が得られるものなぁ。凄い時代なんですよ。 私の学生時代は、1回のFFT計算が数時間要しましたもの。

>BackgroundWokerやPLINQやSystem.Threading.Parallel クラスなど使い方が分かれば必要な人は手軽に使えます。
「スキルのある人が、適時の場面で使う」そういう姿なんでしょうね。

>件の記事がそういう観点で書いてるかは別問題だとしても。
意図が不明なんですよ。

# re: マルチスレッドの出番? 2009/09/18 19:36 ognac

自動でTrack Backされてないので、手動トラックBack

ttp://blogs.wankuma.com/episteme/archive/2009/09/18/181390.aspx

# re: マルチスレッドの出番? 2009/09/18 21:04 ちゃっぴ

Itanium の EPIC みたいなことはできないのかな?

Itanium®プロセッサーの性能を最大限に引き出すアプリケーションの最適化とは
http://www.atmarkit.co.jp/ad/isa/200610/01.html

# re: マルチスレッドの出番? 2009/09/19 0:20 Pasie.

> I/O がボトルネックになってる状態なのにマルチスレッド化するってことなら、(略)
 I/O がボトルネックになってるからマルチスレッドなんでないの?
 

# re: マルチスレッドの出番? 2009/09/23 13:20 こあら

「GUIはMainとWndProcのマルチスレッド」でしたっけ??
と言う事で、なちゃさんに一票。

# re: マルチスレッドの出番? 2009/09/23 23:13 ognac

>「GUIはMainとWndProcのマルチスレッド」でしたっけ??
そうですが、どれだけ知られているのでしょうか。
「知らないけど、困らない」の例といえそうですね。

タイトル
名前
Url
コメント