![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
ハイパースレッディングで複数の数値計算を完了する時間は速くなるのでしょうか?
例えば、Core i7 だと
・コアが4つ
・スレッドが8つ(1コア2スレッド)
となっています。
時間のかかる数値計算のプログラム(ロケットの軌道の計算など)をパラメータ(初期条件など)を変えて8つ計算したい時、
(1)8つの計算を一気に計算する
のと
(2)4つずつ、2回に分けて計算する
のではどちらが効率がよい、あるいは、速く終了するでしょうか?
ハイパースレッディングについての説明を読みました。あまり分かり易いものがなかなか見つからなかったのですが、↓ここを見て何となく原理が分かりました。
http://shop.tsukumo.co.jp/special/030626a/
これをみると、作業をする人(?)がハイパースレッドだとスレッド倍になるので、(1)のように、1つのコアに1つの作業をさせるより2つの作業をさせた方が良いのかなとも思います。
よろしくお願いします。
No.5ベストアンサー
- 回答日時:
>●2コアと2スレッドにはたいした違いはない
同じコアの場合
2コアとハイパースレッディングが有効な1コア(論理2コア)では、物理的に2コアある前者の方が高速です。
現在のCore i7はわかりませんが、過去にはハイパースレッディングが原因で
パフォーマンスが落ちる事を指摘された事があったようです。
http://japan.cnet.com/news/ent/story/0,200005602 …
ただ一般的にはCore i7 4コア(HT)であれば、計算が非同期で動く事を前提にした場合
同じ処理を並列で4スレッド2回走らせるよりも並列8スレッド1回で処理をした方が高速になります。
※既に回答にもありますがWindowsの場合そのときのバックグラウンドで走っているアプリの状況や
その処理自体がCPUキャッシュにヒットしやすいかどうか等
の影響を受けるので一概にどの方法が高速かは言い切る事は出来ません。
No.4
- 回答日時:
一概に言えないというのが回答になりますが、何故プログラムが遅くなるのかを考えると、わかるかと思います。
細かいことを除くと、計算がメインであるようなプログラムが時間がかかる原因は大きく3つ。(計算自体にかかる時間は除いての話ですが)
(1) CPUの空きがない(他のプログラムが実行中)ので空きが出るまで待つ
(2) メモリが足りないので、ディスク上のページファイルとの間でやりとりが発生するがそのときのディスクとのデータ入出力処理や、データ入出力待ち
(3) ファイルと計算データを入出力する際のディスクとのデータ入出力処理や、データ入出力待ち
このうち、マルチCPUやマルチコアやマルチスレッドのおかげで速くなるのは(1)の部分だけです。
ということで、例えば、搭載メモリが2GBとかあって、1つのプログラムの使うメモリ量が10MBとかのとっても小さいプログラムで、計算中にファイル入出力もないというケースであれば、8つのプログラムを同時に動かすと良いです。
同じく搭載メモリが2GBでも、1つのプログラムが使うメモリが1GBとかだと、おそらく1つずつ8回動かした方が良い。これは(2)で遅くなるのを防ぐためです。もしかすると2つずつ4回が良いかもしれませんが。
ありがとうございます!
> 例えば、搭載メモリが2GBとかあって、1つのプログラムの使うメモリ量が10MBとかのとって
> も小さいプログラムで、計算中にファイル入出力もないというケースであれば、
まさにそういう状況を想定していました!
> 8つのプログラムを同時に動かすと良いです。
そうなのですね。
こういった状況・用途の計算の場合は、例えば、
●2コアと2スレッドにはたいした違いはない
と考えて良いのでしょうか。(誤解していたらすみません・・)
No.3
- 回答日時:
折角なので、その「発送センター」の絵を使って説明しましょう。
4コア、というのは、このコンベアが4つある状態です。
1コア2スレッド、というのは、作業員が2人いる状態です。
たしかに、コンベアが4つあれば4倍の荷物を処理できそうですし、二人でやったら2倍処理できそうです。
しかし、次の場合はどうなるでしょうか?
・トラックが1台しかない
・赤いトラックに積む荷物はたくさんあるのに、他のトラックの荷物はほとんどない
・赤い荷物はとても重いので、コンベアから取り出すのに時間がかかる。その間、青い作業員は待つしかない
いずれも、作業効率が落ちます。
そんなことにならないように、管理部が効率よくなるように計画書を作って、現場監督がその通りに実行する必要があるわけです。
トラックが1台の場合なら、トラックに全作業員が押し寄せて邪魔になそうなので、順番にやったり、一人でやったりという指示が必要でしょう。
一つのトラックに集中するなら、他のトラックに荷物をまわすことを考えた方がいいでしょう。
赤い荷物が重かったら、分担しないで、二人で赤青両方した方が早いかもしれません。
プログラムでも同じことが言えます。
プログラマーが効率を考えてプログラムを作って、コンピュータが実行して、はじめてマルチコア/マルチスレッドの効果があります。
white-tiger
困ってます
ハイパースレッディングで複数の数値計算を完了する時間は速くなるのでしょ
ハイパースレッディングで複数の数値計算を完了する時間は速くなるのでしょうか?
例えば、Core i7 だと
・コアが4つ
・スレッドが8つ(1コア2スレッド)
となっています。
> 時間のかかる数値計算のプログラム(ロケットの軌道の計算など)をパラメータ(初期条件など)を変えて8つ計算したい時、
> (1)8つの計算を一気に計算する
> のと
> (2)4つずつ、2回に分けて計算する
> のではどちらが効率がよい、あるいは、速く終了するでしょうか?
一概には言えません。計算量を見積ってどれがいいかを検討する必要があります。
8つのうち、7つはパラメータが悪く、すぐ落下するので計算が短い、となれば、(2)のようにしてまともな1つにパワーを集中させるのがはやいでしょう。
どれも同じくらいなら、8つに分散するのがおそらくいいでしょう。
非常に分かり易い説明をありがとうございます!!!
あと、言葉足らずでした。すみません。
・マルチスレッド・並列計算のプログラムはしない(シングルスレッドのプログラム)
・計算時間は同じくらいの8つのプログラム
というのが前提にしたいことでした。
> どれも同じくらいなら、8つに分散するのがおそらくいいでしょう。
そうなのですね。
思ったのは、上記の例で言うと、
「1つのトラックの取り合い」にならないのかな、というのが自分の疑問だったのだろうと思います。
No.2
- 回答日時:
マルチスレッドに対応するようにプログラミングしないかぎり、シングルスレッドのプログラムと変わりません。
なお、マルチスレッド対応にしてもオーバヘッド等が掛かりますので、2つの(仮想)コアを使ったとしても性能は倍にまでは届きません。
言葉足らずでした。すみません。
・マルチスレッド・並列計算のプログラムはしない(シングルスレッドのプログラム)
・計算時間は同じくらいの8つのプログラム
というのが前提にしたいことでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
ファミリーベーシックのPOKE&H...
-
スライムがつぶれていく様子を...
-
円の最小二乗法のプログラム
-
四則演算プログラム(入力式の...
-
VBAでの拡散計算
-
VBでReplace
-
エクセルで特定のセルのみを任...
-
趣味で「乗換案内」みたいなソ...
-
C言語を使用したプログラミング...
-
Matlabでのニュートン法について
-
CRC8を教えてください
-
良い返事はしたものの。・・。
-
Perlで時間の計算
-
Visual C++でdebugとreleaseで...
-
内税の計算式
-
バッチファイルでウインドウを...
-
Excel VBA TREND関数について
-
60進数の四則計算
-
Javaの多重for文内における変数...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
パソコン
-
VBAで関数をつくる
-
階乗のマクロ
-
EXCELなどで「返す」という表現
-
排他的論理和 BCC(水平パリテ...
-
バッチファイルでウインドウを...
-
変化させるセルが変化しない
-
VBAの再計算が反映されない件に...
-
引き放し法による除算アルゴリ...
-
モジュラス103の計算とは何でし...
-
Visual C++でdebugとreleaseで...
-
エクセルで特定のセルのみを任...
-
数値計算の高速化 (cos, sin, exp)
-
傾いた四角形内の範囲の条件式
-
VBでReplace
-
骨折リスク評価のFRAXについて...
-
アドオン利率を実質年率に変換
-
入射角反射角
-
C言語についてです。 再帰を使...
おすすめ情報