ハイパースレッディングで複数の数値計算を完了する時間は速くなるのでしょうか?
例えば、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で質問しましょう!
似たような質問が見つかりました
- 建築学 ネットワーク工程表(1級管工事施工管理) 5 2022/08/24 08:17
- その他(ソフトウェア) F-BASICで計算中の実行が中途で勝手に止まり、大変困っています。 2 2023/03/02 16:15
- CPU・メモリ・マザーボード インテルCPUの世代ごとのデスクトップとノートのコア数についてこれで正しいですか?(*´ω`*) 1 2023/01/07 14:44
- C言語・C++・C# numpyスライス機能を使った数値計算 2 2023/05/08 16:01
- Chrome(クローム) Chromeの描画領域を2分割して異なるスクロール位置を同時に表示させることはできますか 1 2023/03/01 16:53
- 統計学 t値の計算方法 1 2022/11/29 18:37
- C言語・C++・C# C言語 3 2022/10/04 15:07
- 数学 賃料と専有面積のデータが60部屋分ほどがあり、 賃料÷専有面積(=1㎡あたりの賃料)の数式で計算する 2 2023/02/18 20:33
- Excel(エクセル) セルに特定の色が出た時だけ、式を発動させたい 4 2022/06/17 10:32
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
C言語の課題で、1年の秒数を計...
-
変化させるセルが変化しない
-
排他的論理和 BCC(水平パリテ...
-
C言語についてです。 再帰を使...
-
VBとVBAの違い
-
傾いた四角形内の範囲の条件式
-
骨折リスク評価のFRAXについて...
-
チェックデジット計算できる関...
-
入射角反射角
-
バッチファイルでウインドウを...
-
C++言語で、レナードジョーン...
-
2進数の乗算をc言語で計算した...
-
べき乗の計算が遅い理由
-
数値計算の高速化 (cos, sin, exp)
-
Vba Cells.Findについて教えて...
-
ExcelのマクロVBA動作を軽くす...
-
VBAの再計算が反映されない件に...
-
fortran πについて
-
C言語についての質問です。 ル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
VBAの再計算が反映されない件に...
-
排他的論理和 BCC(水平パリテ...
-
EXCELなどで「返す」という表現
-
バッチファイルでウインドウを...
-
モジュラス103の計算とは何でし...
-
傾いた四角形内の範囲の条件式
-
Visual C++でdebugとreleaseで...
-
変化させるセルが変化しない
-
骨折リスク評価のFRAXについて...
-
C# 計算処理中に実行中ウィン...
-
VBAでの勤務時間計算
-
べき乗の計算が遅い理由
-
C言語についてです。 再帰を使...
-
Excel VBAにてFFT
-
数値計算の高速化 (cos, sin, exp)
-
VBとVBAの違い
-
VB6で正確なミリ秒を計測したい...
-
スレッド処理からダイアログを...
-
matlabで計算終了
おすすめ情報