ハイパースレッディングで数値計算を効率的に行う方法

このQ&Aのポイント
  • ハイパースレッディングを利用すると、複数の数値計算を効率的に処理することができます。
  • コア i7 の場合、4つのコアと8つのスレッドがあります。時間のかかる数値計算を8つ行いたい場合、一気に計算する方法と4つずつ2回に分けて計算する方法があります。
  • ハイパースレッディングを利用すると、1つのコアに2つのスレッドを立てることができるため、作業を並列化することで処理速度を向上させることができます。
回答を見る
  • ベストアンサー

ハイパースレッディングで複数の数値計算を完了する時間は速くなるのでしょ

ハイパースレッディングで複数の数値計算を完了する時間は速くなるのでしょうか? 例えば、Core i7 だと ・コアが4つ ・スレッドが8つ(1コア2スレッド) となっています。 時間のかかる数値計算のプログラム(ロケットの軌道の計算など)をパラメータ(初期条件など)を変えて8つ計算したい時、 (1)8つの計算を一気に計算する のと (2)4つずつ、2回に分けて計算する のではどちらが効率がよい、あるいは、速く終了するでしょうか? ハイパースレッディングについての説明を読みました。あまり分かり易いものがなかなか見つからなかったのですが、↓ここを見て何となく原理が分かりました。 http://shop.tsukumo.co.jp/special/030626a/ これをみると、作業をする人(?)がハイパースレッドだとスレッド倍になるので、(1)のように、1つのコアに1つの作業をさせるより2つの作業をさせた方が良いのかなとも思います。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.5

>●2コアと2スレッドにはたいした違いはない 同じコアの場合 2コアとハイパースレッディングが有効な1コア(論理2コア)では、物理的に2コアある前者の方が高速です。 現在のCore i7はわかりませんが、過去にはハイパースレッディングが原因で パフォーマンスが落ちる事を指摘された事があったようです。 http://japan.cnet.com/news/ent/story/0,2000056022,20091397,00.htm ただ一般的にはCore i7 4コア(HT)であれば、計算が非同期で動く事を前提にした場合 同じ処理を並列で4スレッド2回走らせるよりも並列8スレッド1回で処理をした方が高速になります。 ※既に回答にもありますがWindowsの場合そのときのバックグラウンドで走っているアプリの状況や  その処理自体がCPUキャッシュにヒットしやすいかどうか等  の影響を受けるので一概にどの方法が高速かは言い切る事は出来ません。

その他の回答 (4)

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.4

一概に言えないというのが回答になりますが、何故プログラムが遅くなるのかを考えると、わかるかと思います。 細かいことを除くと、計算がメインであるようなプログラムが時間がかかる原因は大きく3つ。(計算自体にかかる時間は除いての話ですが) (1) CPUの空きがない(他のプログラムが実行中)ので空きが出るまで待つ (2) メモリが足りないので、ディスク上のページファイルとの間でやりとりが発生するがそのときのディスクとのデータ入出力処理や、データ入出力待ち (3) ファイルと計算データを入出力する際のディスクとのデータ入出力処理や、データ入出力待ち このうち、マルチCPUやマルチコアやマルチスレッドのおかげで速くなるのは(1)の部分だけです。 ということで、例えば、搭載メモリが2GBとかあって、1つのプログラムの使うメモリ量が10MBとかのとっても小さいプログラムで、計算中にファイル入出力もないというケースであれば、8つのプログラムを同時に動かすと良いです。 同じく搭載メモリが2GBでも、1つのプログラムが使うメモリが1GBとかだと、おそらく1つずつ8回動かした方が良い。これは(2)で遅くなるのを防ぐためです。もしかすると2つずつ4回が良いかもしれませんが。

white-tiger
質問者

お礼

ありがとうございます! > 例えば、搭載メモリが2GBとかあって、1つのプログラムの使うメモリ量が10MBとかのとって > も小さいプログラムで、計算中にファイル入出力もないというケースであれば、 まさにそういう状況を想定していました! > 8つのプログラムを同時に動かすと良いです。 そうなのですね。 こういった状況・用途の計算の場合は、例えば、 ●2コアと2スレッドにはたいした違いはない と考えて良いのでしょうか。(誤解していたらすみません・・)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答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つに分散するのがおそらくいいでしょう。

white-tiger
質問者

お礼

非常に分かり易い説明をありがとうございます!!! あと、言葉足らずでした。すみません。 ・マルチスレッド・並列計算のプログラムはしない(シングルスレッドのプログラム) ・計算時間は同じくらいの8つのプログラム というのが前提にしたいことでした。 > どれも同じくらいなら、8つに分散するのがおそらくいいでしょう。 そうなのですね。 思ったのは、上記の例で言うと、 「1つのトラックの取り合い」にならないのかな、というのが自分の疑問だったのだろうと思います。

  • ok-kaneto
  • ベストアンサー率39% (1798/4531)
回答No.2

http://www.katto.comm.waseda.ac.jp/~katto/Class/GazoTokuron/code/thread.html マルチスレッドに対応するようにプログラミングしないかぎり、シングルスレッドのプログラムと変わりません。 なお、マルチスレッド対応にしてもオーバヘッド等が掛かりますので、2つの(仮想)コアを使ったとしても性能は倍にまでは届きません。

white-tiger
質問者

お礼

言葉足らずでした。すみません。 ・マルチスレッド・並列計算のプログラムはしない(シングルスレッドのプログラム) ・計算時間は同じくらいの8つのプログラム というのが前提にしたいことでした。

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.1

プログラムの作りに依存します。複数のスレッドで計算をするように作られていれば、ハイパースレッドが有効になります。

white-tiger
質問者

お礼

言葉足らずでした。すみません。 ・マルチスレッド・並列計算のプログラムはしない(シングルスレッドのプログラム) ・計算時間は同じくらいの8つのプログラム というのが前提にしたいことでした。

関連するQ&A

  • 【ハイパースレッディングが認識しない】

    システムInfo CPU: Intel Core i7 950(4Core) Mother: ASUS P6X58D-E OS: Windows7 Professional(SP1) 表題の件につきまして、BIOS上ではハイパースレッディングが有効になっているのに、タスクマネージャー上では4コア分のグラフしか表示されないのですが、デバイスマネージャー上ではCPUが8つとも表示されている状態です。(正常動作しているとのことです。) 以前はタスクマネージャー上で8スレッド分のグラフが表示されていたと認識しております。(日頃タスクマネージャーを常に起動する訳ではございませんでしたので、いつからこの状態かは不明です。) またBIOS、CPU(Chip Set)ドライバーにつきましては、最新バージョンになっているのを確認済みです。 ここで下記の質問です。 1. この場合、ハイパースレッディングが有効になっているのでしょうか?また、併せてハイパースレッディングの有効無効を上記以外で確認する方法はあるのでしょうか?(極力、専用アプリケーションをインストールしない方向でお願いできれば幸いです。) 2. 上記症状につきまして、考えられる原因をお教えいただけますでしょうか?また、その場合の改善方法も併せてご教授願います。 何卒、宜しくお願いいたします。

  • matlabでの長時間の計算について

    すみません、現在matlabで数値解析を行っております。 質問を以下にまとめたので、よろしければアドバイスをお願いします。 -------------------------------------------------------------- matlabで数十分かかると考えられる計算を行おうとしています。 その場合、計算後の大容量のデータは一般的にどのように保存すべきでしょうか? これまで、パラメータを50個用意してそれぞれ計算を行い、 後に見比べるために、目的の変数の値をプロットし、画像(角度などを指定してjpegに)として保存していました。 (for文を使って一定量パラメータを変化させる毎に、saveasを使ってグラフを保存していた。) 今まではパラメータ1つあたり数十秒程度で済む計算だったのでこれでも良かったのですが、 今後はパラメータ1個あたりに対しかかる計算時間が数十分になります。。 そこで、今までと同じように保存していくやり方では、もしグラフの保存方法(角度など)を間違えてしまった場合に かなりの損失になってしまうと思ったので質問しました。。 何か効果的なデータの保存の仕方はありませんでしょうか? 以後もパラメータをfor文を使って一定量変化させ、50個用意して計算していこうと思うのですが・・ 一応現状で考えているのは、saveを使ってworkspace内の変数(全て)をそれぞれ保存していくというものです。 何かその他に効果的なデータの保存方法などありましたら是非教えてください。 -------------------------------------------------------------- 上記のように、 計算時間のかかる計算をmatlabを使って行おうと考えているのですが、 計算機を走らせている間、動作が著しく重くなり、ほとんど他の作業が出来なくなります。 (これは避けられませんよね・・?) 私はmatlabを学校で使っているので、帰宅する際、計算機を走らせて帰ろうと考えています。 (節電家でなくてすみません。。) 問題は途中でメモリ不足などで計算がストップしてしまわないかということです・・ 一応、パラメータを変える毎に初期化すべき変数はzerosを使って初期化しているのですが、 パラメータ毎の目的の変数(6つ)は、多いとそれぞれ10^6×200ほどの配列となる可能性があります。 せっかく手間暇かけて走らせたのに、途中でメモリ不足などと表示されたら辛いなぁと思い・・ 現在使っている計算機はubuntu11.04で、メモリは992.8MiBなのですが、やはりこの計算機だと際どいでしょうか・・? -------------------------------------------------------------- コードに関する質問なのですが・・ uが50000000*200の配列で、それぞれの要素に値が入っているとします。 これをそのまま1行目~50000000行目まで、順にグラフにプロットすると、かなりの時間がかかるので、 1行目から、一定数(例えば100)毎の行の配列を グラフにプロットさせたいのですが、やり方がわかりません・・ x = -10: 10: 200 ; t = 0: 100: 50000000 ; waterfall(x,t,u) ; とするとエラーが出ます。 どなたか訂正出来る方、お願いします。。 waterfall以外でも全然構いません。 -------------------------------------------------------------- 以上長々と質問すみませんでした。。 どなたかご指導頂けると助かります・・ あと、分類というのがよくわからなかったので、その他となっています・・ ごめんなさい。。

  • Accessの数値から時間に変換する時点で困っています。

    Accessの数値から時間に変換する時点で困っています。 仕事の作業上にて、フォームの計算式にて5.25という数値が出ています。 それを5.25→05:15という時間の数字に変換したいのですが、方法がわかりません。 書式設定で可能なものなのか、それとも別のボックスに関数を使用した式をいれればできるのか……ぜひとも教えていただけるよう、よろしくお願い致します。

  • エクセルでの時間計算について

    時間計算について質問です。 図のような仕事上にかけた時間の計算をしたいのですが。終了時刻と休憩時刻で空白のセルがあるとマイナスになってしまします。 計算としてはC行の終了時刻からB列の開始時間を引き、休憩があればさらにマイナスで計算してみています。 終了時刻と休憩時刻で空白のセルがあるときには計算をせずすべてのセルが埋まったら計算結果を表示することは可能でしょうか? 現在ですと合計時間のところでマイナスになってしまい、すべて入力 がされていないと正確な数値になりません。 作業時間はその後の計算の都合上時間表示ではなく数字として表示させています。

  • 並列計算について

    あまりパソコンに詳しい方ではありません。 今、linuxが入ったパソコン(CPU:Intel(R)Core(TM)i7 CPU970@3.20GHz,コア数12, メモリ:5.8GiB)で数値計算をしています。コンパイラはgfortranです。OpenMPを使って、並列計算をしています。 例えば、スレッドを5使って一つのプログラムの計算したとします。次に別のプログラムをスレッドを5使って同時に計算したとします。 CPUモニタで確認すると、合計12スレッド中、10スレッドが使用率100%になります。 しかし、計算時間はそれぞれ倍ぐらいになってしまいます。結局、プログラムを1 つずつ計算するのと同じ時間がかかります。また、使用するスレッドは5ぐらいが最適であることがわかっています。(それ以上多くしても計算時間が多くなるだけ)。つまり、12スレッド中7スレッドは常に仕事をしていません。 原因、及び解決方法はあるでしょうか?

  • Core i5-10600K vs 9600K

    Intel Core i5 9600Kを搭載した自作PCを使用していますが、6コア6スレッドでハイパースレッディングはありません。昨今発売されたIntel Core i5-10600Kは6コア12スレッドでTDPは最高125Wもあるのですが、インテルハイパースレッディングが搭載されています。単純に比較して性能が向上した分、新しいCPUの方がPC全体のパフォーマンスが上がったと体感できるのでしょうか?例えば動画編集時等等。(CPU内蔵GPUは使用せずグラボは使用していますが) https://ark.intel.com/content/www/jp/ja/ark/products/134896/intel-core-i5-9600k-processor-9m-cache-up-to-4-60-ghz.html Intel Core i5 9600K https://www.intel.co.jp/content/www/jp/ja/products/processors/core/i5-processors/i5-10600K.html Intel Core i5 10600K

  • Excel2003で時間計算結果のコピー

    時間表を作成し、開始時刻、終了時刻、作業時間、前作業終了時刻と今作業開始時刻との間隔を表示させてあります。(作業時間=終了時刻-開始時刻、間隔=今開始時刻-前終了時刻)この結果をコピーして数値として貼り付けたいのですが、通常の形式指定で値として貼り付けても出来ません。 又、終了時刻が24:00を超えると作業時間がエラーとなりますので、手で24:00を足して(01:00であれば25:00)ますが、これだと間隔時間がエラーとなる事があります。日付は現在入れてません。入れる事は可能ですが。 現状では、作業時間のトータル(Σ)をとっても結果が出ませんので、数値として貼り付け出来れば、計算が出来るのではと思い質問しました。

  • ハイパー・スレッディングについて

    ハイパー・スレッディングのPentium4搭載パソコンと記録型DVDドライブの購入を考えております。DellのBTOのページを見ますと、選択するとハイパー・スレッディングが無効になる機器があります。Dell以外のメーカーのパソコンでも接続する機器によってハイパー・スレッディングが無効になってしまう事があるのでしょうか?。 また、ハイパー・スレッディングを無効にしてしまう周辺機器は購入前にカタログの仕様欄を見たりすればわかるのでしょうか。

  • ハイパースレッディングとは?

    サーバ設計の中で、CPUだと思いますが、 「ハイパースレッディング対応」とあります。 そのCPUは、1CPU4コアのXeon 3Ghzです。 このハイパースレッディングを使用すると、 OSからすると、1CPU8コアぐらいの性能になるのでしょうか?。 すみません、まだ仕組みを理解しておらず・・ アドバイスを頂けると助かります。

  • ハイパースレッディング

    現在E7205に2.4BGhzを乗せ3.01GhzにしてTMPGEncでエンコード作業をしております。 これを3.06GhzHTにした場合どの位作業時間が短くなるかおおよそで良いので教えて下さい。 今だと23000円位で買える様なので劇的に速くなるのであれば取り替えてみようと思っています。 宜しくお願い致します。